LUCENE-3795: updating to trunk

git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/branches/lucene3795_lsp_spatial_module@1297785 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Ryan McKinley 2012-03-06 23:17:08 +00:00
commit a6af5d8181
573 changed files with 28441 additions and 18108 deletions

View File

@ -99,11 +99,7 @@
<classpathentry kind="lib" path="modules/analysis/morfologik/lib/morfologik-fsa-1.5.2.jar"/> <classpathentry kind="lib" path="modules/analysis/morfologik/lib/morfologik-fsa-1.5.2.jar"/>
<classpathentry kind="lib" path="modules/analysis/morfologik/lib/morfologik-polish-1.5.2.jar"/> <classpathentry kind="lib" path="modules/analysis/morfologik/lib/morfologik-polish-1.5.2.jar"/>
<classpathentry kind="lib" path="modules/analysis/morfologik/lib/morfologik-stemming-1.5.2.jar"/> <classpathentry kind="lib" path="modules/analysis/morfologik/lib/morfologik-stemming-1.5.2.jar"/>
<classpathentry kind="lib" path="modules/benchmark/lib/commons-beanutils-1.7.0.jar"/>
<classpathentry kind="lib" path="modules/benchmark/lib/commons-collections-3.1.jar"/>
<classpathentry kind="lib" path="modules/benchmark/lib/commons-compress-1.2.jar"/> <classpathentry kind="lib" path="modules/benchmark/lib/commons-compress-1.2.jar"/>
<classpathentry kind="lib" path="modules/benchmark/lib/commons-digester-1.7.jar"/>
<classpathentry kind="lib" path="modules/benchmark/lib/commons-logging-1.0.4.jar"/>
<classpathentry kind="lib" path="modules/benchmark/lib/xercesImpl-2.9.1-patched-XERCESJ-1257.jar"/> <classpathentry kind="lib" path="modules/benchmark/lib/xercesImpl-2.9.1-patched-XERCESJ-1257.jar"/>
<classpathentry kind="lib" path="solr/lib/apache-solr-noggit-r1211150.jar"/> <classpathentry kind="lib" path="solr/lib/apache-solr-noggit-r1211150.jar"/>
<classpathentry kind="lib" path="solr/lib/commons-csv-1.0-SNAPSHOT-r966014.jar"/> <classpathentry kind="lib" path="solr/lib/commons-csv-1.0-SNAPSHOT-r966014.jar"/>
@ -124,10 +120,6 @@
<classpathentry kind="lib" path="solr/example/lib/jetty-6.1.26-patched-JETTY-1340.jar"/> <classpathentry kind="lib" path="solr/example/lib/jetty-6.1.26-patched-JETTY-1340.jar"/>
<classpathentry kind="lib" path="solr/example/lib/jetty-util-6.1.26-patched-JETTY-1340.jar"/> <classpathentry kind="lib" path="solr/example/lib/jetty-util-6.1.26-patched-JETTY-1340.jar"/>
<classpathentry kind="lib" path="solr/example/lib/servlet-api-2.5-20081211.jar"/> <classpathentry kind="lib" path="solr/example/lib/servlet-api-2.5-20081211.jar"/>
<classpathentry kind="lib" path="solr/example/lib/jsp-2.1/core-3.1.1.jar"/>
<classpathentry kind="lib" path="solr/example/lib/jsp-2.1/jsp-2.1-glassfish-2.1.v20091210.jar"/>
<classpathentry kind="lib" path="solr/example/lib/jsp-2.1/jsp-2.1-jetty-6.1.26.jar"/>
<classpathentry kind="lib" path="solr/example/lib/jsp-2.1/jsp-api-2.1-glassfish-2.1.v20091210.jar"/>
<classpathentry kind="lib" path="solr/contrib/clustering/lib/carrot2-core-3.5.0.jar"/> <classpathentry kind="lib" path="solr/contrib/clustering/lib/carrot2-core-3.5.0.jar"/>
<classpathentry kind="lib" path="solr/contrib/clustering/lib/hppc-0.3.3.jar"/> <classpathentry kind="lib" path="solr/contrib/clustering/lib/hppc-0.3.3.jar"/>
<classpathentry kind="lib" path="solr/contrib/clustering/lib/jackson-core-asl-1.5.2.jar"/> <classpathentry kind="lib" path="solr/contrib/clustering/lib/jackson-core-asl-1.5.2.jar"/>
@ -167,6 +159,8 @@
<classpathentry kind="lib" path="solr/contrib/uima/lib/uimaj-core-2.3.1.jar"/> <classpathentry kind="lib" path="solr/contrib/uima/lib/uimaj-core-2.3.1.jar"/>
<classpathentry kind="lib" path="solr/contrib/velocity/lib/velocity-1.6.4.jar"/> <classpathentry kind="lib" path="solr/contrib/velocity/lib/velocity-1.6.4.jar"/>
<classpathentry kind="lib" path="solr/contrib/velocity/lib/velocity-tools-2.0.jar"/> <classpathentry kind="lib" path="solr/contrib/velocity/lib/velocity-tools-2.0.jar"/>
<classpathentry kind="lib" path="solr/contrib/velocity/lib/commons-beanutils-1.7.0.jar"/>
<classpathentry kind="lib" path="solr/contrib/velocity/lib/commons-collections-3.2.1.jar"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="output" path="bin"/> <classpathentry kind="output" path="bin"/>
</classpath> </classpath>

View File

@ -5,8 +5,8 @@ Lucene/Solr Maven build instructions
Contents: Contents:
A. How to use nightly Jenkins-built Lucene/Solr Maven artifacts A. How to use nightly Jenkins-built Lucene/Solr Maven artifacts
B. How to generate Lucene Maven artifacts B. How to generate Maven artifacts
C. How to generate Solr Maven artifacts C. How to deploy Maven artifacts to a repository
D. How to use Maven to build Lucene/Solr D. How to use Maven to build Lucene/Solr
----- -----
@ -14,55 +14,59 @@ D. How to use Maven to build Lucene/Solr
A. How to use nightly Jenkins-built Lucene/Solr Maven artifacts A. How to use nightly Jenkins-built Lucene/Solr Maven artifacts
The most recently produced nightly Jenkins-built Lucene and Solr Maven The most recently produced nightly Jenkins-built Lucene and Solr Maven
artifacts are available in Maven repository layout here: snapshot artifacts are available in the Apache Snapshot repository here:
<https://builds.apache.org/hudson/job/Lucene-Solr-Maven-trunk/lastSuccessfulBuild/artifact/maven_artifacts/> http://repository.apache.org/snapshots
An example POM snippet: An example POM snippet:
<project ...> <project ...>
... ...
<repositories> <repositories>
... ...
<repository> <repository>
<id>lucene-solr-jenkins-trunk</id> <id>apache.snapshots</id>
<name>Lucene/Solr Jenkins trunk</name> <name>Apache Snapshot Repository</name>
<url>https://builds.apache.org/job/Lucene-Solr-Maven-trunk/lastSuccessfulBuild/artifact/maven_artifacts</url> <url>http://repository.apache.org/snapshots</url>
<layout>default</layout> <releases>
<snapshots> <enabled>false</enabled>
<enabled>true</enabled> </releases>
</snapshots>
</repository> </repository>
B. How to generate Lucene Maven artifacts B. How to generate Lucene/Solr Maven artifacts
1. Prerequisites: JDK 1.6+ and Ant 1.7.X Prerequisites: JDK 1.6+ and Ant 1.7.X
2. Run the following command from the lucene/ directory: Run 'ant generate-maven-artifacts' to create an internal Maven
repository, including POMs, binary .jars, source .jars, and javadoc
.jars.
ant generate-maven-artifacts You can run the above command in four possible places: the top-level
directory; under lucene/; under solr/; or under modules/. From the
The above command will create an internal Maven repository under top-level directory, from lucene/, or from modules/, the internal
lucene/dist/maven/, including POMs, binary .jars, source .jars, repository will be located at dist/maven/. From solr/, the internal
and javadoc .jars, for Lucene Core, for the Lucene test framework, repository will be located at package/maven/.
for each contrib, and for each module under the top-level modules/
directory.
C. How to generate Solr Maven artifacts C. How to deploy Maven artifacts to a repository
1. Prerequisites: JDK 1.6+ and Ant 1.7.X Prerequisites: JDK 1.6+ and Ant 1.7.X
2. Run the following from the solr/ directory: You can deploy targets for all of Lucene/Solr, only Lucene, only Solr,
or only modules/, as in B. above. To deploy to a Maven repository, the
command is the same as in B. above, with the addition of two system
properties:
ant generate-maven-artifacts ant -Dm2.repository.id=my-repo-id \
-Dm2.repository.url=http://example.org/my/repo \
The above command will create an internal Maven repository under generate-maven-artifacts
solr/package/maven/, including POMs, binary .jars, source .jars,
and javadoc .jars, for Solr Core, for the Solr test framework, The repository ID given in the above command corresponds to a <server>
for each contrib, and for the Solr .war (for which there are no entry in either your ~/.m2/settings.xml or ~/.ant/settings.xml. See
source or javadoc .jars). <http://maven.apache.org/settings.html#Servers> for more information.
(Note that as of version 2.1.3, Maven Ant Tasks cannot handle encrypted
passwords.)
D. How to use Maven to build Lucene/Solr D. How to use Maven to build Lucene/Solr

View File

@ -35,6 +35,17 @@
<module-directory>lucene/contrib/demo</module-directory> <module-directory>lucene/contrib/demo</module-directory>
<build-directory>../../build/contrib/demo</build-directory> <build-directory>../../build/contrib/demo</build-directory>
</properties> </properties>
<scm>
<connection>
scm:svn:http://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</connection>
<developerConnection>
scm:svn:https://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</developerConnection>
<url>
http://svn.apache.org/viewvc/lucene/dev/trunk/${module-directory}
</url>
</scm>
<dependencies> <dependencies>
<dependency> <dependency>
<!-- lucene-test-framework dependency must be declared before lucene-core --> <!-- lucene-test-framework dependency must be declared before lucene-core -->

View File

@ -37,6 +37,17 @@
<module-directory>lucene/contrib/highlighter</module-directory> <module-directory>lucene/contrib/highlighter</module-directory>
<build-directory>../../build/contrib/highlighter</build-directory> <build-directory>../../build/contrib/highlighter</build-directory>
</properties> </properties>
<scm>
<connection>
scm:svn:http://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</connection>
<developerConnection>
scm:svn:https://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</developerConnection>
<url>
http://svn.apache.org/viewvc/lucene/dev/trunk/${module-directory}
</url>
</scm>
<dependencies> <dependencies>
<dependency> <dependency>
<!-- lucene-test-framework dependency must be declared before lucene-core --> <!-- lucene-test-framework dependency must be declared before lucene-core -->

View File

@ -37,6 +37,17 @@
<module-directory>lucene/contrib/memory</module-directory> <module-directory>lucene/contrib/memory</module-directory>
<build-directory>../../build/contrib/memory</build-directory> <build-directory>../../build/contrib/memory</build-directory>
</properties> </properties>
<scm>
<connection>
scm:svn:http://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</connection>
<developerConnection>
scm:svn:https://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</developerConnection>
<url>
http://svn.apache.org/viewvc/lucene/dev/trunk/${module-directory}
</url>
</scm>
<dependencies> <dependencies>
<dependency> <dependency>
<!-- lucene-test-framework dependency must be declared before lucene-core --> <!-- lucene-test-framework dependency must be declared before lucene-core -->

View File

@ -35,6 +35,17 @@
<module-directory>lucene/contrib/misc</module-directory> <module-directory>lucene/contrib/misc</module-directory>
<build-directory>../../build/contrib/misc</build-directory> <build-directory>../../build/contrib/misc</build-directory>
</properties> </properties>
<scm>
<connection>
scm:svn:http://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</connection>
<developerConnection>
scm:svn:https://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</developerConnection>
<url>
http://svn.apache.org/viewvc/lucene/dev/trunk/${module-directory}
</url>
</scm>
<dependencies> <dependencies>
<dependency> <dependency>
<!-- lucene-test-framework dependency must be declared before lucene-core --> <!-- lucene-test-framework dependency must be declared before lucene-core -->

View File

@ -35,6 +35,17 @@
<module-directory>lucene/contrib/sandbox</module-directory> <module-directory>lucene/contrib/sandbox</module-directory>
<build-directory>../../build/contrib/sandbox</build-directory> <build-directory>../../build/contrib/sandbox</build-directory>
</properties> </properties>
<scm>
<connection>
scm:svn:http://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</connection>
<developerConnection>
scm:svn:https://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</developerConnection>
<url>
http://svn.apache.org/viewvc/lucene/dev/trunk/${module-directory}
</url>
</scm>
<dependencies> <dependencies>
<dependency> <dependency>
<!-- lucene-test-framework dependency must be declared before lucene-core --> <!-- lucene-test-framework dependency must be declared before lucene-core -->

View File

@ -35,6 +35,17 @@
<module-directory>lucene/core</module-directory> <module-directory>lucene/core</module-directory>
<build-directory>../build/lucene-maven</build-directory> <build-directory>../build/lucene-maven</build-directory>
</properties> </properties>
<scm>
<connection>
scm:svn:http://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</connection>
<developerConnection>
scm:svn:https://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</developerConnection>
<url>
http://svn.apache.org/viewvc/lucene/dev/trunk/${module-directory}
</url>
</scm>
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>junit</groupId> <groupId>junit</groupId>

View File

@ -31,6 +31,20 @@
<packaging>pom</packaging> <packaging>pom</packaging>
<name>Lucene parent POM</name> <name>Lucene parent POM</name>
<description>Lucene parent POM</description> <description>Lucene parent POM</description>
<properties>
<module-directory>lucene</module-directory>
</properties>
<scm>
<connection>
scm:svn:http://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</connection>
<developerConnection>
scm:svn:https://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</developerConnection>
<url>
http://svn.apache.org/viewvc/lucene/dev/trunk/${module-directory}
</url>
</scm>
<modules> <modules>
<module>core</module> <module>core</module>
<module>test-framework</module> <module>test-framework</module>

View File

@ -35,6 +35,17 @@
<module-directory>lucene/test-framework</module-directory> <module-directory>lucene/test-framework</module-directory>
<build-directory>../build/test-framework</build-directory> <build-directory>../build/test-framework</build-directory>
</properties> </properties>
<scm>
<connection>
scm:svn:http://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</connection>
<developerConnection>
scm:svn:https://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</developerConnection>
<url>
http://svn.apache.org/viewvc/lucene/dev/trunk/${module-directory}
</url>
</scm>
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>${project.groupId}</groupId> <groupId>${project.groupId}</groupId>

View File

@ -35,6 +35,17 @@
<module-directory>modules/analysis/common</module-directory> <module-directory>modules/analysis/common</module-directory>
<build-directory>../build/common</build-directory> <build-directory>../build/common</build-directory>
</properties> </properties>
<scm>
<connection>
scm:svn:http://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</connection>
<developerConnection>
scm:svn:https://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</developerConnection>
<url>
http://svn.apache.org/viewvc/lucene/dev/trunk/${module-directory}
</url>
</scm>
<dependencies> <dependencies>
<dependency> <dependency>
<!-- lucene-test-framework dependency must be declared before lucene-core --> <!-- lucene-test-framework dependency must be declared before lucene-core -->

View File

@ -38,6 +38,17 @@
<module-directory>modules/analysis/icu</module-directory> <module-directory>modules/analysis/icu</module-directory>
<build-directory>../build/icu</build-directory> <build-directory>../build/icu</build-directory>
</properties> </properties>
<scm>
<connection>
scm:svn:http://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</connection>
<developerConnection>
scm:svn:https://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</developerConnection>
<url>
http://svn.apache.org/viewvc/lucene/dev/trunk/${module-directory}
</url>
</scm>
<dependencies> <dependencies>
<dependency> <dependency>
<!-- lucene-test-framework dependency must be declared before lucene-core --> <!-- lucene-test-framework dependency must be declared before lucene-core -->

View File

@ -37,6 +37,17 @@
<module-directory>modules/analysis/kuromoji</module-directory> <module-directory>modules/analysis/kuromoji</module-directory>
<build-directory>../build/kuromoji</build-directory> <build-directory>../build/kuromoji</build-directory>
</properties> </properties>
<scm>
<connection>
scm:svn:http://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</connection>
<developerConnection>
scm:svn:https://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</developerConnection>
<url>
http://svn.apache.org/viewvc/lucene/dev/trunk/${module-directory}
</url>
</scm>
<dependencies> <dependencies>
<dependency> <dependency>
<!-- lucene-test-framework dependency must be declared before lucene-core --> <!-- lucene-test-framework dependency must be declared before lucene-core -->

View File

@ -37,6 +37,17 @@
<module-directory>modules/analysis/morfologik</module-directory> <module-directory>modules/analysis/morfologik</module-directory>
<build-directory>../build/morfologik</build-directory> <build-directory>../build/morfologik</build-directory>
</properties> </properties>
<scm>
<connection>
scm:svn:http://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</connection>
<developerConnection>
scm:svn:https://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</developerConnection>
<url>
http://svn.apache.org/viewvc/lucene/dev/trunk/${module-directory}
</url>
</scm>
<dependencies> <dependencies>
<dependency> <dependency>
<!-- lucene-test-framework dependency must be declared before lucene-core --> <!-- lucene-test-framework dependency must be declared before lucene-core -->

View File

@ -37,6 +37,17 @@
<module-directory>modules/analysis/phonetic</module-directory> <module-directory>modules/analysis/phonetic</module-directory>
<build-directory>../build/phonetic</build-directory> <build-directory>../build/phonetic</build-directory>
</properties> </properties>
<scm>
<connection>
scm:svn:http://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</connection>
<developerConnection>
scm:svn:https://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</developerConnection>
<url>
http://svn.apache.org/viewvc/lucene/dev/trunk/${module-directory}
</url>
</scm>
<dependencies> <dependencies>
<dependency> <dependency>
<!-- lucene-test-framework dependency must be declared before lucene-core --> <!-- lucene-test-framework dependency must be declared before lucene-core -->

View File

@ -35,6 +35,17 @@
<module-directory>modules/analysis/smartcn</module-directory> <module-directory>modules/analysis/smartcn</module-directory>
<build-directory>../build/smartcn</build-directory> <build-directory>../build/smartcn</build-directory>
</properties> </properties>
<scm>
<connection>
scm:svn:http://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</connection>
<developerConnection>
scm:svn:https://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</developerConnection>
<url>
http://svn.apache.org/viewvc/lucene/dev/trunk/${module-directory}
</url>
</scm>
<dependencies> <dependencies>
<dependency> <dependency>
<!-- lucene-test-framework dependency must be declared before lucene-core --> <!-- lucene-test-framework dependency must be declared before lucene-core -->

View File

@ -35,6 +35,17 @@
<module-directory>modules/analysis/stempel</module-directory> <module-directory>modules/analysis/stempel</module-directory>
<build-directory>../build/stempel</build-directory> <build-directory>../build/stempel</build-directory>
</properties> </properties>
<scm>
<connection>
scm:svn:http://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</connection>
<developerConnection>
scm:svn:https://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</developerConnection>
<url>
http://svn.apache.org/viewvc/lucene/dev/trunk/${module-directory}
</url>
</scm>
<dependencies> <dependencies>
<dependency> <dependency>
<!-- lucene-test-framework dependency must be declared before lucene-core --> <!-- lucene-test-framework dependency must be declared before lucene-core -->

View File

@ -39,6 +39,17 @@
<module-directory>modules/analysis/uima</module-directory> <module-directory>modules/analysis/uima</module-directory>
<build-directory>../build/uima</build-directory> <build-directory>../build/uima</build-directory>
</properties> </properties>
<scm>
<connection>
scm:svn:http://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</connection>
<developerConnection>
scm:svn:https://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</developerConnection>
<url>
http://svn.apache.org/viewvc/lucene/dev/trunk/${module-directory}
</url>
</scm>
<dependencies> <dependencies>
<dependency> <dependency>
<!-- lucene-test-framework dependency must be declared before lucene-core --> <!-- lucene-test-framework dependency must be declared before lucene-core -->

View File

@ -35,6 +35,17 @@
<module-directory>modules/benchmark</module-directory> <module-directory>modules/benchmark</module-directory>
<build-directory>build</build-directory> <build-directory>build</build-directory>
</properties> </properties>
<scm>
<connection>
scm:svn:http://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</connection>
<developerConnection>
scm:svn:https://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</developerConnection>
<url>
http://svn.apache.org/viewvc/lucene/dev/trunk/${module-directory}
</url>
</scm>
<dependencies> <dependencies>
<dependency> <dependency>
<!-- lucene-test-framework dependency must be declared before lucene-core --> <!-- lucene-test-framework dependency must be declared before lucene-core -->
@ -82,26 +93,10 @@
<groupId>com.ibm.icu</groupId> <groupId>com.ibm.icu</groupId>
<artifactId>icu4j</artifactId> <artifactId>icu4j</artifactId>
</dependency> </dependency>
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
</dependency>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
</dependency>
<dependency> <dependency>
<groupId>org.apache.commons</groupId> <groupId>org.apache.commons</groupId>
<artifactId>commons-compress</artifactId> <artifactId>commons-compress</artifactId>
</dependency> </dependency>
<dependency>
<groupId>commons-digester</groupId>
<artifactId>commons-digester</artifactId>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</dependency>
</dependencies> </dependencies>
<build> <build>
<directory>${build-directory}</directory> <directory>${build-directory}</directory>

View File

@ -37,6 +37,17 @@
<module-directory>modules/facet</module-directory> <module-directory>modules/facet</module-directory>
<build-directory>build</build-directory> <build-directory>build</build-directory>
</properties> </properties>
<scm>
<connection>
scm:svn:http://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</connection>
<developerConnection>
scm:svn:https://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</developerConnection>
<url>
http://svn.apache.org/viewvc/lucene/dev/trunk/${module-directory}
</url>
</scm>
<dependencies> <dependencies>
<dependency> <dependency>
<!-- lucene-test-framework dependency must be declared before lucene-core --> <!-- lucene-test-framework dependency must be declared before lucene-core -->

View File

@ -35,6 +35,17 @@
<module-directory>modules/grouping</module-directory> <module-directory>modules/grouping</module-directory>
<build-directory>build</build-directory> <build-directory>build</build-directory>
</properties> </properties>
<scm>
<connection>
scm:svn:http://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</connection>
<developerConnection>
scm:svn:https://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</developerConnection>
<url>
http://svn.apache.org/viewvc/lucene/dev/trunk/${module-directory}
</url>
</scm>
<dependencies> <dependencies>
<dependency> <dependency>
<!-- lucene-test-framework dependency must be declared before lucene-core --> <!-- lucene-test-framework dependency must be declared before lucene-core -->

View File

@ -35,6 +35,17 @@
<module-directory>modules/join</module-directory> <module-directory>modules/join</module-directory>
<build-directory>build</build-directory> <build-directory>build</build-directory>
</properties> </properties>
<scm>
<connection>
scm:svn:http://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</connection>
<developerConnection>
scm:svn:https://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</developerConnection>
<url>
http://svn.apache.org/viewvc/lucene/dev/trunk/${module-directory}
</url>
</scm>
<dependencies> <dependencies>
<dependency> <dependency>
<!-- lucene-test-framework dependency must be declared before lucene-core --> <!-- lucene-test-framework dependency must be declared before lucene-core -->

View File

@ -35,6 +35,17 @@
<module-directory>modules/queries</module-directory> <module-directory>modules/queries</module-directory>
<build-directory>build</build-directory> <build-directory>build</build-directory>
</properties> </properties>
<scm>
<connection>
scm:svn:http://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</connection>
<developerConnection>
scm:svn:https://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</developerConnection>
<url>
http://svn.apache.org/viewvc/lucene/dev/trunk/${module-directory}
</url>
</scm>
<dependencies> <dependencies>
<dependency> <dependency>
<!-- lucene-test-framework dependency must be declared before lucene-core --> <!-- lucene-test-framework dependency must be declared before lucene-core -->

View File

@ -35,6 +35,17 @@
<module-directory>modules/queryparser</module-directory> <module-directory>modules/queryparser</module-directory>
<build-directory>build</build-directory> <build-directory>build</build-directory>
</properties> </properties>
<scm>
<connection>
scm:svn:http://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</connection>
<developerConnection>
scm:svn:https://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</developerConnection>
<url>
http://svn.apache.org/viewvc/lucene/dev/trunk/${module-directory}
</url>
</scm>
<dependencies> <dependencies>
<dependency> <dependency>
<!-- lucene-test-framework dependency must be declared before lucene-core --> <!-- lucene-test-framework dependency must be declared before lucene-core -->

View File

@ -35,6 +35,17 @@
<module-directory>modules/suggest</module-directory> <module-directory>modules/suggest</module-directory>
<build-directory>build</build-directory> <build-directory>build</build-directory>
</properties> </properties>
<scm>
<connection>
scm:svn:http://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</connection>
<developerConnection>
scm:svn:https://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</developerConnection>
<url>
http://svn.apache.org/viewvc/lucene/dev/trunk/${module-directory}
</url>
</scm>
<dependencies> <dependencies>
<dependency> <dependency>
<!-- lucene-test-framework dependency must be declared before lucene-core --> <!-- lucene-test-framework dependency must be declared before lucene-core -->

View File

@ -90,13 +90,13 @@
<inceptionYear>2000</inceptionYear> <inceptionYear>2000</inceptionYear>
<scm> <scm>
<connection> <connection>
scm:svn:http://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory} scm:svn:http://svn.apache.org/repos/asf/lucene/dev/trunk
</connection> </connection>
<developerConnection> <developerConnection>
scm:svn:https://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory} scm:svn:https://svn.apache.org/repos/asf/lucene/dev/trunk
</developerConnection> </developerConnection>
<url> <url>
http://svn.apache.org/viewvc/lucene/dev/trunk/${module-directory} http://svn.apache.org/viewvc/lucene/dev/trunk
</url> </url>
</scm> </scm>
<licenses> <licenses>
@ -130,21 +130,11 @@
<artifactId>guava</artifactId> <artifactId>guava</artifactId>
<version>r05</version> <version>r05</version>
</dependency> </dependency>
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.7.0</version>
</dependency>
<dependency> <dependency>
<groupId>commons-codec</groupId> <groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId> <artifactId>commons-codec</artifactId>
<version>1.6</version> <version>1.6</version>
</dependency> </dependency>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2.1</version>
</dependency>
<dependency> <dependency>
<groupId>commons-digester</groupId> <groupId>commons-digester</groupId>
<artifactId>commons-digester</artifactId> <artifactId>commons-digester</artifactId>
@ -315,21 +305,6 @@
<artifactId>jetty-util</artifactId> <artifactId>jetty-util</artifactId>
<version>${patched.jetty.version}</version> <version>${patched.jetty.version}</version>
</dependency> </dependency>
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jsp-2.1-glassfish</artifactId>
<version>2.1.v20091210</version>
</dependency>
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jsp-2.1-jetty</artifactId>
<version>${jetty.version}</version>
</dependency>
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jsp-api-2.1-glassfish</artifactId>
<version>2.1.v20091210</version>
</dependency>
<dependency> <dependency>
<groupId>org.slf4j</groupId> <groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId> <artifactId>jcl-over-slf4j</artifactId>

View File

@ -33,8 +33,19 @@
<description>Apache Solr Analysis Extras</description> <description>Apache Solr Analysis Extras</description>
<properties> <properties>
<module-directory>solr/contrib/analysis-extras</module-directory> <module-directory>solr/contrib/analysis-extras</module-directory>
<build-directory>../../build/contrib/analysis-extras</build-directory> <build-directory>../../build/contrib/solr-analysis-extras</build-directory>
</properties> </properties>
<scm>
<connection>
scm:svn:http://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</connection>
<developerConnection>
scm:svn:https://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</developerConnection>
<url>
http://svn.apache.org/viewvc/lucene/dev/trunk/${module-directory}
</url>
</scm>
<dependencies> <dependencies>
<dependency> <dependency>
<!-- lucene-test-framework dependency must be declared before lucene-core --> <!-- lucene-test-framework dependency must be declared before lucene-core -->

View File

@ -33,8 +33,19 @@
<description>Apache Solr Clustering</description> <description>Apache Solr Clustering</description>
<properties> <properties>
<module-directory>solr/contrib/clustering</module-directory> <module-directory>solr/contrib/clustering</module-directory>
<build-directory>../../build/contrib/clustering</build-directory> <build-directory>../../build/contrib/solr-clustering</build-directory>
</properties> </properties>
<scm>
<connection>
scm:svn:http://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</connection>
<developerConnection>
scm:svn:https://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</developerConnection>
<url>
http://svn.apache.org/viewvc/lucene/dev/trunk/${module-directory}
</url>
</scm>
<dependencies> <dependencies>
<dependency> <dependency>
<!-- lucene-test-framework dependency must be declared before lucene-core --> <!-- lucene-test-framework dependency must be declared before lucene-core -->

View File

@ -33,8 +33,19 @@
<description>Apache Solr DataImportHandler Extras</description> <description>Apache Solr DataImportHandler Extras</description>
<properties> <properties>
<module-directory>solr/contrib/dataimporthandler-extras</module-directory> <module-directory>solr/contrib/dataimporthandler-extras</module-directory>
<build-directory>../../build/contrib/dataimporthandler-extras</build-directory> <build-directory>../../build/contrib/solr-dataimporthandler-extras</build-directory>
</properties> </properties>
<scm>
<connection>
scm:svn:http://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</connection>
<developerConnection>
scm:svn:https://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</developerConnection>
<url>
http://svn.apache.org/viewvc/lucene/dev/trunk/${module-directory}
</url>
</scm>
<dependencies> <dependencies>
<dependency> <dependency>
<!-- lucene-test-framework dependency must be declared before lucene-core --> <!-- lucene-test-framework dependency must be declared before lucene-core -->

View File

@ -33,8 +33,19 @@
<description>Apache Solr DataImportHandler</description> <description>Apache Solr DataImportHandler</description>
<properties> <properties>
<module-directory>solr/contrib/dataimporthandler</module-directory> <module-directory>solr/contrib/dataimporthandler</module-directory>
<build-directory>../../build/contrib/dataimporthandler</build-directory> <build-directory>../../build/contrib/solr-dataimporthandler</build-directory>
</properties> </properties>
<scm>
<connection>
scm:svn:http://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</connection>
<developerConnection>
scm:svn:https://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</developerConnection>
<url>
http://svn.apache.org/viewvc/lucene/dev/trunk/${module-directory}
</url>
</scm>
<dependencies> <dependencies>
<dependency> <dependency>
<!-- lucene-test-framework dependency must be declared before lucene-core --> <!-- lucene-test-framework dependency must be declared before lucene-core -->

View File

@ -36,8 +36,19 @@
</description> </description>
<properties> <properties>
<module-directory>solr/contrib/extraction</module-directory> <module-directory>solr/contrib/extraction</module-directory>
<build-directory>../../build/contrib/extraction</build-directory> <build-directory>../../build/contrib/solr-cell</build-directory>
</properties> </properties>
<scm>
<connection>
scm:svn:http://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</connection>
<developerConnection>
scm:svn:https://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</developerConnection>
<url>
http://svn.apache.org/viewvc/lucene/dev/trunk/${module-directory}
</url>
</scm>
<dependencies> <dependencies>
<dependency> <dependency>
<!-- lucene-test-framework dependency must be declared before lucene-core --> <!-- lucene-test-framework dependency must be declared before lucene-core -->

View File

@ -36,9 +36,20 @@
Its purpose is to identify language from documents and tag the document with language code. Its purpose is to identify language from documents and tag the document with language code.
</description> </description>
<properties> <properties>
<module-directory>solr/contrib/solr-langid</module-directory> <module-directory>solr/contrib/langid</module-directory>
<build-directory>../../build/contrib/solr-langid</build-directory> <build-directory>../../build/contrib/solr-langid</build-directory>
</properties> </properties>
<scm>
<connection>
scm:svn:http://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</connection>
<developerConnection>
scm:svn:https://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</developerConnection>
<url>
http://svn.apache.org/viewvc/lucene/dev/trunk/${module-directory}
</url>
</scm>
<dependencies> <dependencies>
<dependency> <dependency>
<!-- lucene-test-framework dependency must be declared before lucene-core --> <!-- lucene-test-framework dependency must be declared before lucene-core -->

View File

@ -29,12 +29,23 @@
<groupId>org.apache.solr</groupId> <groupId>org.apache.solr</groupId>
<artifactId>solr-uima</artifactId> <artifactId>solr-uima</artifactId>
<packaging>jar</packaging> <packaging>jar</packaging>
<name>Apache Solr - UIMA integration</name> <name>Apache Solr UIMA integration</name>
<description>Apache Solr - UIMA integration</description> <description>Apache Solr - UIMA integration</description>
<properties> <properties>
<module-directory>solr/contrib/uima</module-directory> <module-directory>solr/contrib/uima</module-directory>
<build-directory>../../build/contrib/uima</build-directory> <build-directory>../../build/contrib/solr-uima</build-directory>
</properties> </properties>
<scm>
<connection>
scm:svn:http://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</connection>
<developerConnection>
scm:svn:https://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</developerConnection>
<url>
http://svn.apache.org/viewvc/lucene/dev/trunk/${module-directory}
</url>
</scm>
<dependencies> <dependencies>
<dependency> <dependency>
<!-- lucene-test-framework dependency must be declared before lucene-core --> <!-- lucene-test-framework dependency must be declared before lucene-core -->
@ -45,6 +56,11 @@
<version>${project.version}</version> <version>${project.version}</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-analyzers-uima</artifactId>
<version>${project.version}</version>
</dependency>
<dependency> <dependency>
<groupId>${project.groupId}</groupId> <groupId>${project.groupId}</groupId>
<artifactId>solr-core</artifactId> <artifactId>solr-core</artifactId>

View File

@ -35,6 +35,17 @@
<module-directory>solr/contrib/velocity</module-directory> <module-directory>solr/contrib/velocity</module-directory>
<build-directory>../../build/contrib/solr-velocity</build-directory> <build-directory>../../build/contrib/solr-velocity</build-directory>
</properties> </properties>
<scm>
<connection>
scm:svn:http://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</connection>
<developerConnection>
scm:svn:https://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</developerConnection>
<url>
http://svn.apache.org/viewvc/lucene/dev/trunk/${module-directory}
</url>
</scm>
<dependencies> <dependencies>
<dependency> <dependency>
<!-- lucene-test-framework dependency must be declared before lucene-core --> <!-- lucene-test-framework dependency must be declared before lucene-core -->

View File

@ -32,9 +32,20 @@
<name>Apache Solr Core</name> <name>Apache Solr Core</name>
<description>Apache Solr Core</description> <description>Apache Solr Core</description>
<properties> <properties>
<module-directory>solr</module-directory> <module-directory>solr/core</module-directory>
<build-directory>../build/solr-maven</build-directory> <build-directory>../build/solr-maven</build-directory>
</properties> </properties>
<scm>
<connection>
scm:svn:http://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</connection>
<developerConnection>
scm:svn:https://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</developerConnection>
<url>
http://svn.apache.org/viewvc/lucene/dev/trunk/${module-directory}
</url>
</scm>
<dependencies> <dependencies>
<dependency> <dependency>
<!-- lucene-test-framework dependency must be declared before lucene-core --> <!-- lucene-test-framework dependency must be declared before lucene-core -->
@ -170,11 +181,6 @@
<artifactId>jetty-util</artifactId> <artifactId>jetty-util</artifactId>
<optional>true</optional> <!-- Only used for tests and one command-line utility: JettySolrRunner --> <optional>true</optional> <!-- Only used for tests and one command-line utility: JettySolrRunner -->
</dependency> </dependency>
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jsp-2.1-jetty</artifactId>
<scope>test</scope>
</dependency>
<dependency> <dependency>
<groupId>org.codehaus.woodstox</groupId> <groupId>org.codehaus.woodstox</groupId>
<artifactId>wstx-asl</artifactId> <artifactId>wstx-asl</artifactId>

View File

@ -40,7 +40,19 @@
</modules> </modules>
<properties> <properties>
<tests.luceneMatchVersion>LUCENE_CURRENT</tests.luceneMatchVersion> <tests.luceneMatchVersion>LUCENE_CURRENT</tests.luceneMatchVersion>
<module-directory>solr</module-directory>
</properties> </properties>
<scm>
<connection>
scm:svn:http://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</connection>
<developerConnection>
scm:svn:https://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</developerConnection>
<url>
http://svn.apache.org/viewvc/lucene/dev/trunk/${module-directory}
</url>
</scm>
<issueManagement> <issueManagement>
<system>JIRA</system> <system>JIRA</system>
<url>http://issues.apache.org/jira/browse/SOLR</url> <url>http://issues.apache.org/jira/browse/SOLR</url>

View File

@ -35,6 +35,17 @@
<module-directory>solr/solrj</module-directory> <module-directory>solr/solrj</module-directory>
<build-directory>../build/solr-solrj</build-directory> <build-directory>../build/solr-solrj</build-directory>
</properties> </properties>
<scm>
<connection>
scm:svn:http://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</connection>
<developerConnection>
scm:svn:https://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</developerConnection>
<url>
http://svn.apache.org/viewvc/lucene/dev/trunk/${module-directory}
</url>
</scm>
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>org.apache.solr</groupId> <groupId>org.apache.solr</groupId>

View File

@ -35,6 +35,17 @@
<module-directory>solr/test-framework</module-directory> <module-directory>solr/test-framework</module-directory>
<build-directory>../build/solr-test-framework</build-directory> <build-directory>../build/solr-test-framework</build-directory>
</properties> </properties>
<scm>
<connection>
scm:svn:http://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</connection>
<developerConnection>
scm:svn:https://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</developerConnection>
<url>
http://svn.apache.org/viewvc/lucene/dev/trunk/${module-directory}
</url>
</scm>
<dependencies> <dependencies>
<!-- These dependencies are compile scope because this is a test framework. --> <!-- These dependencies are compile scope because this is a test framework. -->
<dependency> <dependency>

View File

@ -35,6 +35,17 @@
<module-directory>solr/webapp</module-directory> <module-directory>solr/webapp</module-directory>
<build-directory>../build</build-directory> <build-directory>../build</build-directory>
</properties> </properties>
<scm>
<connection>
scm:svn:http://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</connection>
<developerConnection>
scm:svn:https://svn.apache.org/repos/asf/lucene/dev/trunk/${module-directory}
</developerConnection>
<url>
http://svn.apache.org/viewvc/lucene/dev/trunk/${module-directory}
</url>
</scm>
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>${project.groupId}</groupId> <groupId>${project.groupId}</groupId>

View File

@ -859,9 +859,13 @@ New Features
* LUCENE-3725: Added optional packing to FST building; this uses extra * LUCENE-3725: Added optional packing to FST building; this uses extra
RAM during building but results in a smaller FST. (Mike McCandless) RAM during building but results in a smaller FST. (Mike McCandless)
* LUCENE-3714: Add top N shortest cost paths search for FST<Long>. * LUCENE-3714: Add top N shortest cost paths search for FST.
(Robert Muir, Dawid Weiss, Mike McCandless) (Robert Muir, Dawid Weiss, Mike McCandless)
* LUCENE-3789: Expose MTQ TermsEnum via RewriteMethod for non package private
access (Simon Willnauer)
Bug fixes Bug fixes
* LUCENE-3595: Fixed FieldCacheRangeFilter and FieldCacheTermsFilter * LUCENE-3595: Fixed FieldCacheRangeFilter and FieldCacheTermsFilter
@ -911,6 +915,11 @@ Bug fixes
These checks now use getFilePointer instead to avoid this. These checks now use getFilePointer instead to avoid this.
(Jamir Shaikh, Mike McCandless, Robert Muir) (Jamir Shaikh, Mike McCandless, Robert Muir)
* LUCENE-3816: Fixed problem in FilteredDocIdSet, if null was returned
from the delegate DocIdSet.iterator(), which is allowed to return
null by DocIdSet specification when no documents match.
(Shay Banon via Uwe Schindler)
Optimizations Optimizations
* LUCENE-3653: Improve concurrency in VirtualMethod and AttributeSource by * LUCENE-3653: Improve concurrency in VirtualMethod and AttributeSource by
@ -923,6 +932,12 @@ Documentation
Build Build
* LUCENE-3847: LuceneTestCase will now check for modifications of System
properties before and after each test (and suite). If changes are detected,
the test will fail. A rule can be used to reset system properties to
before-scope state (and this has been used to make Solr tests pass).
(Dawid Weiss, Uwe Schindler).
* LUCENE-3228: Stop downloading external javadoc package-list files: * LUCENE-3228: Stop downloading external javadoc package-list files:
- Added package-list files for Oracle Java javadocs and JUnit javadocs to - Added package-list files for Oracle Java javadocs and JUnit javadocs to
@ -1109,9 +1124,6 @@ New Features
* LUCENE-3558: Moved SearcherManager, NRTManager & SearcherLifetimeManager into * LUCENE-3558: Moved SearcherManager, NRTManager & SearcherLifetimeManager into
core. All classes are contained in o.a.l.search. (Simon Willnauer) core. All classes are contained in o.a.l.search. (Simon Willnauer)
* LUCENE-3789: Expose MTQ TermsEnum via RewriteMethod for non package private
access (Simon Willnauer)
Optimizations Optimizations
* LUCENE-3426: Add NGramPhraseQuery which extends PhraseQuery and tries to * LUCENE-3426: Add NGramPhraseQuery which extends PhraseQuery and tries to

View File

@ -354,9 +354,7 @@
<artifact:pom id="maven.project" file="@{pom.xml}"/> <artifact:pom id="maven.project" file="@{pom.xml}"/>
<artifact:deploy file="@{jar.file}"> <artifact:deploy file="@{jar.file}">
<artifact-attachments/> <artifact-attachments/>
<remoteRepository url="${m2.repository.url}"> <remoteRepository id="${m2.repository.id}" url="${m2.repository.url}"/>
<authentication username="${m2.repository.username}" privateKey="${m2.repository.private.key}" password="${m2.repository.password}"/>
</remoteRepository>
<pom refid="maven.project"/> <pom refid="maven.project"/>
</artifact:deploy> </artifact:deploy>
</sequential> </sequential>
@ -374,9 +372,7 @@
<artifact:install-provider artifactId="wagon-ssh" version="1.0-beta-7"/> <artifact:install-provider artifactId="wagon-ssh" version="1.0-beta-7"/>
<artifact:pom id="maven.project" file="${maven.build.dir}/pom.xml" /> <artifact:pom id="maven.project" file="${maven.build.dir}/pom.xml" />
<artifact:deploy file="@{jar.file}"> <artifact:deploy file="@{jar.file}">
<remoteRepository url="${m2.repository.url}"> <remoteRepository id="${m2.repository.id}" url="${m2.repository.url}"/>
<authentication username="${m2.repository.username}" privateKey="${m2.repository.private.key}" password="${m2.repository.password}"/>
</remoteRepository>
<pom refid="maven.project"/> <pom refid="maven.project"/>
</artifact:deploy> </artifact:deploy>
</sequential> </sequential>

View File

@ -68,6 +68,10 @@ New Features
cached IO pages due to large merges. (Varun Thacker, Mike cached IO pages due to large merges. (Varun Thacker, Mike
McCandless) McCandless)
* LUCENE-3827: DocsAndPositionsEnum from MemoryIndex implements
start/endOffset, if offsets are indexed. (Alan Woodward via Mike
McCandless)
API Changes API Changes
* LUCENE-2606: Changed RegexCapabilities interface to fix thread * LUCENE-2606: Changed RegexCapabilities interface to fix thread
@ -111,6 +115,13 @@ Changes in backwards compatibility policy
* LUCENE-3626: The internal implementation classes in PKIndexSplitter * LUCENE-3626: The internal implementation classes in PKIndexSplitter
and MultiPassIndexSplitter were made private as they now work and MultiPassIndexSplitter were made private as they now work
per segment. (Uwe Schindler) per segment. (Uwe Schindler)
* LUCENE-3807: Cleaned up Suggest / Lookup API. Term weights (freqs) are now
64bit signed integers instead of 32bit floats. Sorting of terms is now a
disk based merge sort instead of an in-memory sort. The Lookup API now
accepts and returns CharSequence instead of String which should be converted
into a String before used in a datastructure that relies on hashCode / equals.
(Simon Willnauer)
Changes in Runtime Behavior Changes in Runtime Behavior
@ -143,6 +154,9 @@ New Features
* LUCENE-3730: Refine Kuromoji search mode (Mode.SEARCH) decompounding * LUCENE-3730: Refine Kuromoji search mode (Mode.SEARCH) decompounding
heuristics. (Christian Moen via Robert Muir) heuristics. (Christian Moen via Robert Muir)
* LUCENE-3767: Kuromoji tokenizer/analyzer produces both compound words
and the segmentation of that compound in Mode.SEARCH. (Robert Muir, Mike McCandless via Christian Moen)
* LUCENE-3685: Add ToChildBlockJoinQuery and renamed previous * LUCENE-3685: Add ToChildBlockJoinQuery and renamed previous
BlockJoinQuery to ToParentBlockJoinQuery, so that you can now do BlockJoinQuery to ToParentBlockJoinQuery, so that you can now do
joins in both parent to child and child to parent directions. joins in both parent to child and child to parent directions.

View File

@ -38,6 +38,7 @@ import org.apache.lucene.document.Field;
import org.apache.lucene.document.FieldType; import org.apache.lucene.document.FieldType;
import org.apache.lucene.document.TextField; import org.apache.lucene.document.TextField;
import org.apache.lucene.index.CorruptIndexException; import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader; import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig; import org.apache.lucene.index.IndexWriterConfig;
@ -83,7 +84,7 @@ public class FormBasedXmlQueryDemo extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//Take all completed form fields and add to a Properties object //Take all completed form fields and add to a Properties object
Properties completedFormFields = new Properties(); Properties completedFormFields = new Properties();
Enumeration pNames = request.getParameterNames(); Enumeration<?> pNames = request.getParameterNames();
while (pNames.hasMoreElements()) { while (pNames.hasMoreElements()) {
String propName = (String) pNames.nextElement(); String propName = (String) pNames.nextElement();
String value = request.getParameter(propName); String value = request.getParameter(propName);
@ -147,7 +148,7 @@ public class FormBasedXmlQueryDemo extends HttpServlet {
//open searcher //open searcher
// this example never closes it reader! // this example never closes it reader!
IndexReader reader = IndexReader.open(rd); IndexReader reader = DirectoryReader.open(rd);
searcher = new IndexSearcher(reader); searcher = new IndexSearcher(reader);
} }
} }

View File

@ -50,6 +50,7 @@ import org.apache.lucene.search.highlight.SynonymTokenizer.TestHighlightRunner;
import org.apache.lucene.search.spans.*; import org.apache.lucene.search.spans.*;
import org.apache.lucene.store.Directory; import org.apache.lucene.store.Directory;
import org.apache.lucene.util.BytesRef; import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.LuceneTestCase;
import org.apache.lucene.util.automaton.BasicAutomata; import org.apache.lucene.util.automaton.BasicAutomata;
import org.apache.lucene.util.automaton.CharacterRunAutomaton; import org.apache.lucene.util.automaton.CharacterRunAutomaton;
import org.apache.lucene.util.automaton.RegExp; import org.apache.lucene.util.automaton.RegExp;
@ -722,7 +723,6 @@ public class HighlighterTest extends BaseTokenStreamTestCase implements Formatte
@Override @Override
public void run() throws Exception { public void run() throws Exception {
numHighlights = 0; numHighlights = 0;
String queryString = FIELD_NAME + ":[kannedy TO kznnedy]";
// Need to explicitly set the QueryParser property to use TermRangeQuery // Need to explicitly set the QueryParser property to use TermRangeQuery
// rather // rather
@ -1249,8 +1249,6 @@ public class HighlighterTest extends BaseTokenStreamTestCase implements Formatte
String text = "this is a text with searchterm in it"; String text = "this is a text with searchterm in it";
SimpleHTMLFormatter fm = new SimpleHTMLFormatter(); SimpleHTMLFormatter fm = new SimpleHTMLFormatter();
TokenStream tokenStream = new MockAnalyzer(random, MockTokenizer.SIMPLE, true, stopWords, true)
.tokenStream("text", new StringReader(text));
Highlighter hg = getHighlighter(query, "text", fm); Highlighter hg = getHighlighter(query, "text", fm);
hg.setTextFragmenter(new NullFragmenter()); hg.setTextFragmenter(new NullFragmenter());
hg.setMaxDocCharsToAnalyze(36); hg.setMaxDocCharsToAnalyze(36);
@ -1969,16 +1967,16 @@ final class SynonymTokenizer extends TokenStream {
String result = highlighter.getBestFragments(tokenStream, text, maxNumFragmentsRequired, String result = highlighter.getBestFragments(tokenStream, text, maxNumFragmentsRequired,
fragmentSeparator); fragmentSeparator);
if (HighlighterTest.VERBOSE) System.out.println("\t" + result); if (LuceneTestCase.VERBOSE) System.out.println("\t" + result);
} }
} }
abstract void run() throws Exception; abstract void run() throws Exception;
void start() throws Exception { void start() throws Exception {
if (HighlighterTest.VERBOSE) System.out.println("Run QueryScorer"); if (LuceneTestCase.VERBOSE) System.out.println("Run QueryScorer");
run(); run();
if (HighlighterTest.VERBOSE) System.out.println("Run QueryTermScorer"); if (LuceneTestCase.VERBOSE) System.out.println("Run QueryTermScorer");
mode = QUERY_TERM; mode = QUERY_TERM;
run(); run();
} }

View File

@ -43,10 +43,8 @@ import org.apache.lucene.index.FieldInfos;
import org.apache.lucene.index.FieldInvertState; import org.apache.lucene.index.FieldInvertState;
import org.apache.lucene.index.Fields; import org.apache.lucene.index.Fields;
import org.apache.lucene.index.FieldsEnum; import org.apache.lucene.index.FieldsEnum;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.OrdTermState; import org.apache.lucene.index.OrdTermState;
import org.apache.lucene.index.StoredFieldVisitor; import org.apache.lucene.index.StoredFieldVisitor;
import org.apache.lucene.index.Term;
import org.apache.lucene.index.TermState; import org.apache.lucene.index.TermState;
import org.apache.lucene.index.Terms; import org.apache.lucene.index.Terms;
import org.apache.lucene.index.TermsEnum; import org.apache.lucene.index.TermsEnum;
@ -206,7 +204,7 @@ public class MemoryIndex {
* Arrays.binarySearch() and Arrays.sort() * Arrays.binarySearch() and Arrays.sort()
*/ */
private static final Comparator<Object> termComparator = new Comparator<Object>() { private static final Comparator<Object> termComparator = new Comparator<Object>() {
@SuppressWarnings("unchecked") @SuppressWarnings({"unchecked","rawtypes"})
public int compare(Object o1, Object o2) { public int compare(Object o1, Object o2) {
if (o1 instanceof Map.Entry<?,?>) o1 = ((Map.Entry<?,?>) o1).getKey(); if (o1 instanceof Map.Entry<?,?>) o1 = ((Map.Entry<?,?>) o1).getKey();
if (o2 instanceof Map.Entry<?,?>) o2 = ((Map.Entry<?,?>) o2).getKey(); if (o2 instanceof Map.Entry<?,?>) o2 = ((Map.Entry<?,?>) o2).getKey();
@ -226,14 +224,14 @@ public class MemoryIndex {
* Constructs an empty instance that can optionally store the start and end * Constructs an empty instance that can optionally store the start and end
* character offset of each token term in the text. This can be useful for * character offset of each token term in the text. This can be useful for
* highlighting of hit locations with the Lucene highlighter package. * highlighting of hit locations with the Lucene highlighter package.
* Private until the highlighter package matures, so that this can actually * Protected until the highlighter package matures, so that this can actually
* be meaningfully integrated. * be meaningfully integrated.
* *
* @param storeOffsets * @param storeOffsets
* whether or not to store the start and end character offset of * whether or not to store the start and end character offset of
* each token term in the text * each token term in the text
*/ */
private MemoryIndex(boolean storeOffsets) { protected MemoryIndex(boolean storeOffsets) {
this.stride = storeOffsets ? 3 : 1; this.stride = storeOffsets ? 3 : 1;
fieldInfos = new FieldInfos(); fieldInfos = new FieldInfos();
} }
@ -610,9 +608,6 @@ public class MemoryIndex {
/** Boost factor for hits for this field */ /** Boost factor for hits for this field */
private final float boost; private final float boost;
/** Term for this field's fieldName, lazily computed on demand */
public transient Term template;
private final long sumTotalTermFreq; private final long sumTotalTermFreq;
public Info(HashMap<BytesRef,ArrayIntList> terms, int numTokens, int numOverlapTokens, float boost) { public Info(HashMap<BytesRef,ArrayIntList> terms, int numTokens, int numOverlapTokens, float boost) {
@ -643,16 +638,6 @@ public class MemoryIndex {
if (sortedTerms == null) sortedTerms = sort(terms); if (sortedTerms == null) sortedTerms = sort(terms);
} }
/** note that the frequency can be calculated as numPosition(getPositions(x)) */
public ArrayIntList getPositions(BytesRef term) {
return terms.get(term);
}
/** note that the frequency can be calculated as numPosition(getPositions(x)) */
public ArrayIntList getPositions(int pos) {
return sortedTerms[pos].getValue();
}
public float getBoost() { public float getBoost() {
return boost; return boost;
} }
@ -672,10 +657,6 @@ public class MemoryIndex {
private int[] elements; private int[] elements;
private int size = 0; private int size = 0;
public ArrayIntList() {
this(10);
}
public ArrayIntList(int initialCapacity) { public ArrayIntList(int initialCapacity) {
elements = new int[initialCapacity]; elements = new int[initialCapacity];
} }
@ -702,16 +683,6 @@ public class MemoryIndex {
return size; return size;
} }
public int[] toArray(int stride) {
int[] arr = new int[size() / stride];
if (stride == 1) {
System.arraycopy(elements, 0, arr, 0, size); // fast path
} else {
for (int i=0, j=0; j < size; i++, j += stride) arr[i] = elements[j];
}
return arr;
}
private void ensureCapacity(int minCapacity) { private void ensureCapacity(int minCapacity) {
int newCapacity = Math.max(minCapacity, (elements.length * 3) / 2 + 1); int newCapacity = Math.max(minCapacity, (elements.length * 3) / 2 + 1);
int[] newElements = new int[newCapacity]; int[] newElements = new int[newCapacity];
@ -1046,22 +1017,22 @@ public class MemoryIndex {
@Override @Override
public int freq() { public int freq() {
return positions.size(); return positions.size() / stride;
} }
@Override @Override
public int nextPosition() { public int nextPosition() {
return positions.get(posUpto++); return positions.get(posUpto++ * stride);
} }
@Override @Override
public int startOffset() { public int startOffset() {
return -1; return stride == 1 ? -1 : positions.get((posUpto - 1) * stride + 1);
} }
@Override @Override
public int endOffset() { public int endOffset() {
return -1; return stride == 1 ? -1 : positions.get((posUpto - 1) * stride + 2);
} }
@Override @Override
@ -1164,16 +1135,7 @@ public class MemoryIndex {
public static final int PTR = Constants.JRE_IS_64BIT ? 8 : 4; public static final int PTR = Constants.JRE_IS_64BIT ? 8 : 4;
// bytes occupied by primitive data types
public static final int BOOLEAN = 1;
public static final int BYTE = 1;
public static final int CHAR = 2;
public static final int SHORT = 2;
public static final int INT = 4; public static final int INT = 4;
public static final int LONG = 8;
public static final int FLOAT = 4;
public static final int DOUBLE = 8;
private static final int LOG_PTR = (int) Math.round(log2(PTR)); private static final int LOG_PTR = (int) Math.round(log2(PTR));
/** /**
@ -1201,28 +1163,15 @@ public class MemoryIndex {
return sizeOfObject(INT + PTR*len); return sizeOfObject(INT + PTR*len);
} }
public static int sizeOfCharArray(int len) {
return sizeOfObject(INT + CHAR*len);
}
public static int sizeOfIntArray(int len) { public static int sizeOfIntArray(int len) {
return sizeOfObject(INT + INT*len); return sizeOfObject(INT + INT*len);
} }
public static int sizeOfString(int len) {
return sizeOfObject(3*INT + PTR) + sizeOfCharArray(len);
}
public static int sizeOfHashMap(int len) { public static int sizeOfHashMap(int len) {
return sizeOfObject(4*PTR + 4*INT) + sizeOfObjectArray(len) return sizeOfObject(4*PTR + 4*INT) + sizeOfObjectArray(len)
+ len * sizeOfObject(3*PTR + INT); // entries + len * sizeOfObject(3*PTR + INT); // entries
} }
// note: does not include referenced objects
public static int sizeOfArrayList(int len) {
return sizeOfObject(PTR + 2*INT) + sizeOfObjectArray(len);
}
public static int sizeOfArrayIntList(int len) { public static int sizeOfArrayIntList(int len) {
return sizeOfObject(PTR + INT) + sizeOfIntArray(len); return sizeOfObject(PTR + INT) + sizeOfIntArray(len);
} }

View File

@ -34,6 +34,7 @@ import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field; import org.apache.lucene.document.Field;
import org.apache.lucene.document.TextField; import org.apache.lucene.document.TextField;
import org.apache.lucene.index.AtomicReader; import org.apache.lucene.index.AtomicReader;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.DocsAndPositionsEnum; import org.apache.lucene.index.DocsAndPositionsEnum;
import org.apache.lucene.index.DocsEnum; import org.apache.lucene.index.DocsEnum;
import org.apache.lucene.index.IndexReader; import org.apache.lucene.index.IndexReader;
@ -135,7 +136,7 @@ public class MemoryIndexTest extends BaseTokenStreamTestCase {
* Run all queries against both the RAMDirectory and MemoryIndex, ensuring they are the same. * Run all queries against both the RAMDirectory and MemoryIndex, ensuring they are the same.
*/ */
public void assertAllQueries(MemoryIndex memory, Directory ramdir, Analyzer analyzer) throws Exception { public void assertAllQueries(MemoryIndex memory, Directory ramdir, Analyzer analyzer) throws Exception {
IndexReader reader = IndexReader.open(ramdir); IndexReader reader = DirectoryReader.open(ramdir);
IndexSearcher ram = new IndexSearcher(reader); IndexSearcher ram = new IndexSearcher(reader);
IndexSearcher mem = memory.createSearcher(); IndexSearcher mem = memory.createSearcher();
QueryParser qp = new QueryParser(TEST_VERSION_CURRENT, "foo", analyzer); QueryParser qp = new QueryParser(TEST_VERSION_CURRENT, "foo", analyzer);
@ -204,13 +205,16 @@ public class MemoryIndexTest extends BaseTokenStreamTestCase {
public void testDocsAndPositionsEnumStart() throws Exception { public void testDocsAndPositionsEnumStart() throws Exception {
Analyzer analyzer = new MockAnalyzer(random); Analyzer analyzer = new MockAnalyzer(random);
MemoryIndex memory = new MemoryIndex(); MemoryIndex memory = new MemoryIndex(true);
memory.addField("foo", "bar", analyzer); memory.addField("foo", "bar", analyzer);
AtomicReader reader = (AtomicReader) memory.createSearcher().getIndexReader(); AtomicReader reader = (AtomicReader) memory.createSearcher().getIndexReader();
DocsAndPositionsEnum disi = reader.termPositionsEnum(null, "foo", new BytesRef("bar"), false); DocsAndPositionsEnum disi = reader.termPositionsEnum(null, "foo", new BytesRef("bar"), false);
int docid = disi.docID(); int docid = disi.docID();
assertTrue(docid == -1 || docid == DocIdSetIterator.NO_MORE_DOCS); assertTrue(docid == -1 || docid == DocIdSetIterator.NO_MORE_DOCS);
assertTrue(disi.nextDoc() != DocIdSetIterator.NO_MORE_DOCS); assertTrue(disi.nextDoc() != DocIdSetIterator.NO_MORE_DOCS);
assertEquals(0, disi.nextPosition());
assertEquals(0, disi.startOffset());
assertEquals(3, disi.endOffset());
// now reuse and check again // now reuse and check again
TermsEnum te = reader.terms("foo").iterator(null); TermsEnum te = reader.terms("foo").iterator(null);

View File

@ -180,7 +180,7 @@ public class MultiPassIndexSplitter {
private static final class FakeDeleteIndexReader extends MultiReader { private static final class FakeDeleteIndexReader extends MultiReader {
public FakeDeleteIndexReader(IndexReader reader) throws IOException { public FakeDeleteIndexReader(IndexReader reader) throws IOException {
super(initSubReaders(reader), false /* dont close */); super(initSubReaders(reader));
} }
private static AtomicReader[] initSubReaders(IndexReader reader) throws IOException { private static AtomicReader[] initSubReaders(IndexReader reader) throws IOException {

View File

@ -41,6 +41,7 @@ import org.apache.lucene.index.Norm;
* subclasses can choose between. * subclasses can choose between.
* </p> * </p>
* *
* @see <a href="doc-files/ss.gnuplot">A Gnuplot file used to generate some of the visualizations refrenced from each function.</a>
*/ */
public class SweetSpotSimilarity extends DefaultSimilarity { public class SweetSpotSimilarity extends DefaultSimilarity {
@ -75,7 +76,7 @@ public class SweetSpotSimilarity extends DefaultSimilarity {
* *
* @param min the minimum tf value to ever be returned (default: 0.0) * @param min the minimum tf value to ever be returned (default: 0.0)
* @param max the maximum tf value to ever be returned (default: 2.0) * @param max the maximum tf value to ever be returned (default: 2.0)
* @param base the base value to be used in the exponential for the hyperbolic function (default: e) * @param base the base value to be used in the exponential for the hyperbolic function (default: 1.3)
* @param xoffset the midpoint of the hyperbolic function (default: 10.0) * @param xoffset the midpoint of the hyperbolic function (default: 10.0)
* @see #hyperbolicTf * @see #hyperbolicTf
*/ */
@ -135,6 +136,7 @@ public class SweetSpotSimilarity extends DefaultSimilarity {
* </p> * </p>
* *
* @see #setLengthNormFactors * @see #setLengthNormFactors
* @see <a href="doc-files/ss.computeLengthNorm.svg">An SVG visualization of this function</a>
*/ */
public float computeLengthNorm(int numTerms) { public float computeLengthNorm(int numTerms) {
final int l = ln_min; final int l = ln_min;
@ -175,6 +177,7 @@ public class SweetSpotSimilarity extends DefaultSimilarity {
* </p> * </p>
* *
* @see #setBaselineTfFactors * @see #setBaselineTfFactors
* @see <a href="doc-files/ss.baselineTf.svg">An SVG visualization of this function</a>
*/ */
public float baselineTf(float freq) { public float baselineTf(float freq) {
@ -198,6 +201,7 @@ public class SweetSpotSimilarity extends DefaultSimilarity {
* </p> * </p>
* *
* @see #setHyperbolicTfFactors * @see #setHyperbolicTfFactors
* @see <a href="doc-files/ss.hyperbolicTf.svg">An SVG visualization of this function</a>
*/ */
public float hyperbolicTf(float freq) { public float hyperbolicTf(float freq) {
if (0.0f == freq) return 0.0f; if (0.0f == freq) return 0.0f;

View File

@ -0,0 +1,208 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg viewBox="0 0 600 400"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<desc>Produced by GNUPLOT 4.2 patchlevel 5 </desc>
<defs>
<circle id='gpDot' r='0.5' stroke-width='0.5'/>
<path id='gpPt0' stroke-width='0.244' stroke='currentColor' d='M-1,0 h2 M0,-1 v2'/>
<path id='gpPt1' stroke-width='0.244' stroke='currentColor' d='M-1,-1 L1,1 M1,-1 L-1,1'/>
<path id='gpPt2' stroke-width='0.244' stroke='currentColor' d='M-1,0 L1,0 M0,-1 L0,1 M-1,-1 L1,1 M-1,1 L1,-1'/>
<rect id='gpPt3' stroke-width='0.244' stroke='currentColor' x='-1' y='-1' width='2' height='2'/>
<rect id='gpPt4' stroke-width='0.244' stroke='currentColor' fill='currentColor' x='-1' y='-1' width='2' height='2'/>
<circle id='gpPt5' stroke-width='0.244' stroke='currentColor' cx='0' cy='0' r='1'/>
<use xlink:href='#gpPt5' id='gpPt6' fill='currentColor' stroke='none'/>
<path id='gpPt7' stroke-width='0.244' stroke='currentColor' d='M0,-1.33 L-1.33,0.67 L1.33,0.67 z'/>
<use xlink:href='#gpPt7' id='gpPt8' fill='currentColor' stroke='none'/>
<use xlink:href='#gpPt7' id='gpPt9' stroke='currentColor' transform='rotate(180)'/>
<use xlink:href='#gpPt9' id='gpPt10' fill='currentColor' stroke='none'/>
<use xlink:href='#gpPt3' id='gpPt11' stroke='currentColor' transform='rotate(45)'/>
<use xlink:href='#gpPt11' id='gpPt12' fill='currentColor' stroke='none'/>
</defs>
<g style="fill:none; color:white; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
</g>
<g style="fill:none; color:black; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
<path d='M50.0,367.2 L58.2,367.2 M580.7,367.2 L572.5,367.2 '></path>
<g transform="translate(42.3,371.3)" style="stroke:none; fill:black; font-family:arial; font-size:11.00pt; text-anchor:end">
<text><tspan>-1</tspan>
</text>
</g>
<path d='M50.0,331.9 L58.2,331.9 M580.7,331.9 L572.5,331.9 '></path>
<g transform="translate(42.3,336.0)" style="stroke:none; fill:black; font-family:arial; font-size:11.00pt; text-anchor:end">
<text><tspan> 0</tspan>
</text>
</g>
<path d='M50.0,296.5 L58.2,296.5 M580.7,296.5 L572.5,296.5 '></path>
<g transform="translate(42.3,300.6)" style="stroke:none; fill:black; font-family:arial; font-size:11.00pt; text-anchor:end">
<text><tspan> 1</tspan>
</text>
</g>
<path d='M50.0,261.2 L58.2,261.2 M580.7,261.2 L572.5,261.2 '></path>
<g transform="translate(42.3,265.3)" style="stroke:none; fill:black; font-family:arial; font-size:11.00pt; text-anchor:end">
<text><tspan> 2</tspan>
</text>
</g>
<path d='M50.0,225.9 L58.2,225.9 M580.7,225.9 L572.5,225.9 '></path>
<g transform="translate(42.3,230.0)" style="stroke:none; fill:black; font-family:arial; font-size:11.00pt; text-anchor:end">
<text><tspan> 3</tspan>
</text>
</g>
<path d='M50.0,190.5 L58.2,190.5 M580.7,190.5 L572.5,190.5 '></path>
<g transform="translate(42.3,194.6)" style="stroke:none; fill:black; font-family:arial; font-size:11.00pt; text-anchor:end">
<text><tspan> 4</tspan>
</text>
</g>
<path d='M50.0,155.2 L58.2,155.2 M580.7,155.2 L572.5,155.2 '></path>
<g transform="translate(42.3,159.3)" style="stroke:none; fill:black; font-family:arial; font-size:11.00pt; text-anchor:end">
<text><tspan> 5</tspan>
</text>
</g>
<path d='M50.0,119.9 L58.2,119.9 M580.7,119.9 L572.5,119.9 '></path>
<g transform="translate(42.3,124.0)" style="stroke:none; fill:black; font-family:arial; font-size:11.00pt; text-anchor:end">
<text><tspan> 6</tspan>
</text>
</g>
<path d='M50.0,84.5 L58.2,84.5 M580.7,84.5 L572.5,84.5 '></path>
<g transform="translate(42.3,88.6)" style="stroke:none; fill:black; font-family:arial; font-size:11.00pt; text-anchor:end">
<text><tspan> 7</tspan>
</text>
</g>
<path d='M50.0,49.2 L58.2,49.2 M580.7,49.2 L572.5,49.2 '></path>
<g transform="translate(42.3,53.3)" style="stroke:none; fill:black; font-family:arial; font-size:11.00pt; text-anchor:end">
<text><tspan> 8</tspan>
</text>
</g>
<path d='M50.0,367.2 L50.0,359.0 M50.0,49.2 L50.0,57.4 '></path>
<g transform="translate(50.0,387.7)" style="stroke:none; fill:black; font-family:arial; font-size:11.00pt; text-anchor:middle">
<text><tspan> 0</tspan>
</text>
</g>
<path d='M182.7,367.2 L182.7,359.0 M182.7,49.2 L182.7,57.4 '></path>
<g transform="translate(182.7,387.7)" style="stroke:none; fill:black; font-family:arial; font-size:11.00pt; text-anchor:middle">
<text><tspan> 5</tspan>
</text>
</g>
<path d='M315.4,367.2 L315.4,359.0 M315.4,49.2 L315.4,57.4 '></path>
<g transform="translate(315.4,387.7)" style="stroke:none; fill:black; font-family:arial; font-size:11.00pt; text-anchor:middle">
<text><tspan> 10</tspan>
</text>
</g>
<path d='M448.0,367.2 L448.0,359.0 M448.0,49.2 L448.0,57.4 '></path>
<g transform="translate(448.0,387.7)" style="stroke:none; fill:black; font-family:arial; font-size:11.00pt; text-anchor:middle">
<text><tspan> 15</tspan>
</text>
</g>
<path d='M580.7,367.2 L580.7,359.0 M580.7,49.2 L580.7,57.4 '></path>
<g transform="translate(580.7,387.7)" style="stroke:none; fill:black; font-family:arial; font-size:11.00pt; text-anchor:middle">
<text><tspan> 20</tspan>
</text>
</g>
<path d='M50.0,49.2 L50.0,367.2 L580.7,367.2 L580.7,49.2 L50.0,49.2 Z '></path>
<g transform="translate(315.3,28.7)" style="stroke:none; fill:black; font-family:arial; font-size:11.00pt; text-anchor:middle">
<text><tspan>SweetSpotSimilarity.baselineTf(x)</tspan>
</text>
</g>
<path d='M57.7,123.0 L57.7,57.4 L227.6,57.4 L227.6,123.0 L57.7,123.0 Z '></path>
<path d='M57.7,57.4 L227.6,57.4 '></path>
</g>
<g style="fill:none; color:red; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
</g>
<g style="fill:none; color:black; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
<g transform="translate(173.2,69.7)" style="stroke:none; fill:black; font-family:arial; font-size:11.00pt; text-anchor:end">
<text><tspan>all defaults</tspan>
</text>
</g>
</g>
<g style="fill:none; color:red; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
<path d='M180.9,65.6 L219.9,65.6 M50.0,331.9 L55.4,316.0 L60.7,309.4 L66.1,304.4 L71.4,300.1 L76.8,296.4
L82.2,293.0 L87.5,289.8 L92.9,286.9 L98.2,284.2 L103.6,281.6 L109.0,279.2 L114.3,276.9 L119.7,274.6
L125.0,272.4 L130.4,270.4 L135.8,268.3 L141.1,266.4 L146.5,264.5 L151.9,262.6 L157.2,260.8 L162.6,259.1
L167.9,257.4 L173.3,255.7 L178.7,254.1 L184.0,252.5 L189.4,250.9 L194.7,249.3 L200.1,247.8 L205.5,246.3
L210.8,244.9 L216.2,243.4 L221.5,242.0 L226.9,240.6 L232.3,239.3 L237.6,237.9 L243.0,236.6 L248.3,235.3
L253.7,234.0 L259.1,232.7 L264.4,231.4 L269.8,230.2 L275.1,228.9 L280.5,227.7 L285.9,226.5 L291.2,225.3
L296.6,224.2 L301.9,223.0 L307.3,221.8 L312.7,220.7 L318.0,219.6 L323.4,218.5 L328.8,217.3 L334.1,216.3
L339.5,215.2 L344.8,214.1 L350.2,213.0 L355.6,212.0 L360.9,210.9 L366.3,209.9 L371.6,208.9 L377.0,207.8
L382.4,206.8 L387.7,205.8 L393.1,204.8 L398.4,203.8 L403.8,202.8 L409.2,201.9 L414.5,200.9 L419.9,199.9
L425.2,199.0 L430.6,198.0 L436.0,197.1 L441.3,196.2 L446.7,195.3 L452.0,194.3 L457.4,193.4 L462.8,192.5
L468.1,191.6 L473.5,190.7 L478.8,189.8 L484.2,188.9 L489.6,188.1 L494.9,187.2 L500.3,186.3 L505.7,185.4
L511.0,184.6 L516.4,183.7 L521.7,182.9 L527.1,182.0 L532.5,181.2 L537.8,180.4 L543.2,179.5 L548.5,178.7
L553.9,177.9 L559.3,177.1 L564.6,176.3 L570.0,175.5 L575.3,174.7 L580.7,173.9 '></path>
</g>
<g style="fill:none; color:green; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
</g>
<g style="fill:none; color:black; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
<g transform="translate(173.2,86.1)" style="stroke:none; fill:black; font-family:arial; font-size:11.00pt; text-anchor:end">
<text><tspan>base=1.5</tspan>
</text>
</g>
</g>
<g style="fill:none; color:green; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
<path d='M180.9,82.0 L219.9,82.0 M50.0,278.9 L55.4,276.5 L60.7,274.3 L66.1,272.2 L71.4,270.1 L76.8,268.1
L82.2,266.1 L87.5,264.2 L92.9,262.4 L98.2,260.6 L103.6,258.9 L109.0,257.1 L114.3,255.5 L119.7,253.8
L125.0,252.2 L130.4,250.7 L135.8,249.1 L141.1,247.6 L146.5,246.1 L151.9,244.7 L157.2,243.2 L162.6,241.8
L167.9,240.4 L173.3,239.1 L178.7,237.7 L184.0,236.4 L189.4,235.1 L194.7,233.8 L200.1,232.5 L205.5,231.3
L210.8,230.0 L216.2,228.8 L221.5,227.6 L226.9,226.4 L232.3,225.2 L237.6,224.0 L243.0,222.8 L248.3,221.7
L253.7,220.5 L259.1,219.4 L264.4,218.3 L269.8,217.2 L275.1,216.1 L280.5,215.0 L285.9,213.9 L291.2,212.9
L296.6,211.8 L301.9,210.8 L307.3,209.7 L312.7,208.7 L318.0,207.7 L323.4,206.7 L328.8,205.7 L334.1,204.7
L339.5,203.7 L344.8,202.7 L350.2,201.7 L355.6,200.8 L360.9,199.8 L366.3,198.9 L371.6,197.9 L377.0,197.0
L382.4,196.1 L387.7,195.1 L393.1,194.2 L398.4,193.3 L403.8,192.4 L409.2,191.5 L414.5,190.6 L419.9,189.7
L425.2,188.8 L430.6,187.9 L436.0,187.1 L441.3,186.2 L446.7,185.3 L452.0,184.5 L457.4,183.6 L462.8,182.8
L468.1,181.9 L473.5,181.1 L478.8,180.3 L484.2,179.4 L489.6,178.6 L494.9,177.8 L500.3,177.0 L505.7,176.2
L511.0,175.3 L516.4,174.5 L521.7,173.7 L527.1,172.9 L532.5,172.2 L537.8,171.4 L543.2,170.6 L548.5,169.8
L553.9,169.0 L559.3,168.3 L564.6,167.5 L570.0,166.7 L575.3,166.0 L580.7,165.2 '></path>
</g>
<g style="fill:none; color:blue; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
</g>
<g style="fill:none; color:black; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
<g transform="translate(173.2,102.5)" style="stroke:none; fill:black; font-family:arial; font-size:11.00pt; text-anchor:end">
<text><tspan>min=5</tspan>
</text>
</g>
</g>
<g style="fill:none; color:blue; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
<path d='M180.9,98.4 L219.9,98.4 M50.0,331.9 L55.4,331.9 L60.7,331.9 L66.1,331.9 L71.4,331.9 L76.8,331.9
L82.2,331.9 L87.5,331.9 L92.9,331.9 L98.2,331.9 L103.6,331.9 L109.0,331.9 L114.3,331.9 L119.7,331.9
L125.0,331.9 L130.4,331.9 L135.8,331.9 L141.1,331.9 L146.5,331.9 L151.9,331.9 L157.2,331.9 L162.6,331.9
L167.9,331.9 L173.3,331.9 L178.7,331.9 L184.0,323.9 L189.4,314.1 L194.7,308.0 L200.1,303.2 L205.5,299.1
L210.8,295.5 L216.2,292.2 L221.5,289.1 L226.9,286.3 L232.3,283.6 L237.6,281.0 L243.0,278.6 L248.3,276.3
L253.7,274.1 L259.1,271.9 L264.4,269.8 L269.8,267.8 L275.1,265.9 L280.5,264.0 L285.9,262.2 L291.2,260.4
L296.6,258.7 L301.9,257.0 L307.3,255.3 L312.7,253.7 L318.0,252.1 L323.4,250.5 L328.8,249.0 L334.1,247.5
L339.5,246.0 L344.8,244.5 L350.2,243.1 L355.6,241.7 L360.9,240.3 L366.3,238.9 L371.6,237.6 L377.0,236.2
L382.4,234.9 L387.7,233.6 L393.1,232.4 L398.4,231.1 L403.8,229.9 L409.2,228.6 L414.5,227.4 L419.9,226.2
L425.2,225.0 L430.6,223.9 L436.0,222.7 L441.3,221.6 L446.7,220.4 L452.0,219.3 L457.4,218.2 L462.8,217.1
L468.1,216.0 L473.5,214.9 L478.8,213.8 L484.2,212.8 L489.6,211.7 L494.9,210.7 L500.3,209.6 L505.7,208.6
L511.0,207.6 L516.4,206.6 L521.7,205.6 L527.1,204.6 L532.5,203.6 L537.8,202.6 L543.2,201.6 L548.5,200.7
L553.9,199.7 L559.3,198.8 L564.6,197.8 L570.0,196.9 L575.3,195.9 L580.7,195.0 '></path>
</g>
<g style="fill:none; color:cyan; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
</g>
<g style="fill:none; color:black; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
<g transform="translate(173.2,118.9)" style="stroke:none; fill:black; font-family:arial; font-size:11.00pt; text-anchor:end">
<text><tspan>min=5, base=1.5</tspan>
</text>
</g>
</g>
<g style="fill:none; color:cyan; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
<path d='M180.9,114.8 L219.9,114.8 M50.0,278.9 L55.4,278.9 L60.7,278.9 L66.1,278.9 L71.4,278.9 L76.8,278.9
L82.2,278.9 L87.5,278.9 L92.9,278.9 L98.2,278.9 L103.6,278.9 L109.0,278.9 L114.3,278.9 L119.7,278.9
L125.0,278.9 L130.4,278.9 L135.8,278.9 L141.1,278.9 L146.5,278.9 L151.9,278.9 L157.2,278.9 L162.6,278.9
L167.9,278.9 L173.3,278.9 L178.7,278.9 L184.0,278.3 L189.4,276.0 L194.7,273.8 L200.1,271.6 L205.5,269.6
L210.8,267.6 L216.2,265.6 L221.5,263.8 L226.9,261.9 L232.3,260.2 L237.6,258.4 L243.0,256.7 L248.3,255.1
L253.7,253.4 L259.1,251.8 L264.4,250.3 L269.8,248.8 L275.1,247.3 L280.5,245.8 L285.9,244.3 L291.2,242.9
L296.6,241.5 L301.9,240.1 L307.3,238.7 L312.7,237.4 L318.0,236.1 L323.4,234.8 L328.8,233.5 L334.1,232.2
L339.5,230.9 L344.8,229.7 L350.2,228.5 L355.6,227.3 L360.9,226.1 L366.3,224.9 L371.6,223.7 L377.0,222.5
L382.4,221.4 L387.7,220.3 L393.1,219.1 L398.4,218.0 L403.8,216.9 L409.2,215.8 L414.5,214.7 L419.9,213.7
L425.2,212.6 L430.6,211.6 L436.0,210.5 L441.3,209.5 L446.7,208.5 L452.0,207.4 L457.4,206.4 L462.8,205.4
L468.1,204.4 L473.5,203.4 L478.8,202.5 L484.2,201.5 L489.6,200.5 L494.9,199.6 L500.3,198.6 L505.7,197.7
L511.0,196.7 L516.4,195.8 L521.7,194.9 L527.1,194.0 L532.5,193.1 L537.8,192.2 L543.2,191.3 L548.5,190.4
L553.9,189.5 L559.3,188.6 L564.6,187.7 L570.0,186.8 L575.3,186.0 L580.7,185.1 '></path>
</g>
<g style="fill:none; color:black; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
<path d='M50.0,49.2 L50.0,367.2 L580.7,367.2 L580.7,49.2 L50.0,49.2 Z '></path>
</g>
</svg>

After

Width:  |  Height:  |  Size: 13 KiB

View File

@ -0,0 +1,201 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg viewBox="0 0 600 400"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<desc>Produced by GNUPLOT 4.2 patchlevel 5 </desc>
<defs>
<circle id='gpDot' r='0.5' stroke-width='0.5'/>
<path id='gpPt0' stroke-width='0.244' stroke='currentColor' d='M-1,0 h2 M0,-1 v2'/>
<path id='gpPt1' stroke-width='0.244' stroke='currentColor' d='M-1,-1 L1,1 M1,-1 L-1,1'/>
<path id='gpPt2' stroke-width='0.244' stroke='currentColor' d='M-1,0 L1,0 M0,-1 L0,1 M-1,-1 L1,1 M-1,1 L1,-1'/>
<rect id='gpPt3' stroke-width='0.244' stroke='currentColor' x='-1' y='-1' width='2' height='2'/>
<rect id='gpPt4' stroke-width='0.244' stroke='currentColor' fill='currentColor' x='-1' y='-1' width='2' height='2'/>
<circle id='gpPt5' stroke-width='0.244' stroke='currentColor' cx='0' cy='0' r='1'/>
<use xlink:href='#gpPt5' id='gpPt6' fill='currentColor' stroke='none'/>
<path id='gpPt7' stroke-width='0.244' stroke='currentColor' d='M0,-1.33 L-1.33,0.67 L1.33,0.67 z'/>
<use xlink:href='#gpPt7' id='gpPt8' fill='currentColor' stroke='none'/>
<use xlink:href='#gpPt7' id='gpPt9' stroke='currentColor' transform='rotate(180)'/>
<use xlink:href='#gpPt9' id='gpPt10' fill='currentColor' stroke='none'/>
<use xlink:href='#gpPt3' id='gpPt11' stroke='currentColor' transform='rotate(45)'/>
<use xlink:href='#gpPt11' id='gpPt12' fill='currentColor' stroke='none'/>
</defs>
<g style="fill:none; color:white; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
</g>
<g style="fill:none; color:black; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
<path d='M65.4,367.2 L73.6,367.2 M580.7,367.2 L572.5,367.2 '></path>
<g transform="translate(57.7,371.3)" style="stroke:none; fill:black; font-family:arial; font-size:11.00pt; text-anchor:end">
<text><tspan> 0</tspan>
</text>
</g>
<path d='M65.4,314.2 L73.6,314.2 M580.7,314.2 L572.5,314.2 '></path>
<g transform="translate(57.7,318.3)" style="stroke:none; fill:black; font-family:arial; font-size:11.00pt; text-anchor:end">
<text><tspan> 0.2</tspan>
</text>
</g>
<path d='M65.4,261.2 L73.6,261.2 M580.7,261.2 L572.5,261.2 '></path>
<g transform="translate(57.7,265.3)" style="stroke:none; fill:black; font-family:arial; font-size:11.00pt; text-anchor:end">
<text><tspan> 0.4</tspan>
</text>
</g>
<path d='M65.4,208.2 L73.6,208.2 M580.7,208.2 L572.5,208.2 '></path>
<g transform="translate(57.7,212.3)" style="stroke:none; fill:black; font-family:arial; font-size:11.00pt; text-anchor:end">
<text><tspan> 0.6</tspan>
</text>
</g>
<path d='M65.4,155.2 L73.6,155.2 M580.7,155.2 L572.5,155.2 '></path>
<g transform="translate(57.7,159.3)" style="stroke:none; fill:black; font-family:arial; font-size:11.00pt; text-anchor:end">
<text><tspan> 0.8</tspan>
</text>
</g>
<path d='M65.4,102.2 L73.6,102.2 M580.7,102.2 L572.5,102.2 '></path>
<g transform="translate(57.7,106.3)" style="stroke:none; fill:black; font-family:arial; font-size:11.00pt; text-anchor:end">
<text><tspan> 1</tspan>
</text>
</g>
<path d='M65.4,49.2 L73.6,49.2 M580.7,49.2 L572.5,49.2 '></path>
<g transform="translate(57.7,53.3)" style="stroke:none; fill:black; font-family:arial; font-size:11.00pt; text-anchor:end">
<text><tspan> 1.2</tspan>
</text>
</g>
<path d='M65.4,367.2 L65.4,359.0 M65.4,49.2 L65.4,57.4 '></path>
<g transform="translate(65.4,387.7)" style="stroke:none; fill:black; font-family:arial; font-size:11.00pt; text-anchor:middle">
<text><tspan> 0</tspan>
</text>
</g>
<path d='M91.2,367.2 L91.2,363.1 M91.2,49.2 L91.2,53.3 M116.9,367.2 L116.9,363.1 M116.9,49.2 L116.9,53.3
M142.7,367.2 L142.7,363.1 M142.7,49.2 L142.7,53.3 M168.5,367.2 L168.5,363.1 M168.5,49.2 L168.5,53.3
M194.2,367.2 L194.2,359.0 M194.2,49.2 L194.2,57.4 '></path>
<g transform="translate(194.2,387.7)" style="stroke:none; fill:black; font-family:arial; font-size:11.00pt; text-anchor:middle">
<text><tspan> 5</tspan>
</text>
</g>
<path d='M220.0,367.2 L220.0,363.1 M220.0,49.2 L220.0,53.3 M245.8,367.2 L245.8,363.1 M245.8,49.2 L245.8,53.3
M271.5,367.2 L271.5,363.1 M271.5,49.2 L271.5,53.3 M297.3,367.2 L297.3,363.1 M297.3,49.2 L297.3,53.3
M323.1,367.2 L323.1,359.0 M323.1,49.2 L323.1,57.4 '></path>
<g transform="translate(323.1,387.7)" style="stroke:none; fill:black; font-family:arial; font-size:11.00pt; text-anchor:middle">
<text><tspan> 10</tspan>
</text>
</g>
<path d='M348.8,367.2 L348.8,363.1 M348.8,49.2 L348.8,53.3 M374.6,367.2 L374.6,363.1 M374.6,49.2 L374.6,53.3
M400.3,367.2 L400.3,363.1 M400.3,49.2 L400.3,53.3 M426.1,367.2 L426.1,363.1 M426.1,49.2 L426.1,53.3
M451.9,367.2 L451.9,359.0 M451.9,49.2 L451.9,57.4 '></path>
<g transform="translate(451.9,387.7)" style="stroke:none; fill:black; font-family:arial; font-size:11.00pt; text-anchor:middle">
<text><tspan> 15</tspan>
</text>
</g>
<path d='M477.6,367.2 L477.6,363.1 M477.6,49.2 L477.6,53.3 M503.4,367.2 L503.4,363.1 M503.4,49.2 L503.4,53.3
M529.2,367.2 L529.2,363.1 M529.2,49.2 L529.2,53.3 M554.9,367.2 L554.9,363.1 M554.9,49.2 L554.9,53.3
M580.7,367.2 L580.7,359.0 M580.7,49.2 L580.7,57.4 '></path>
<g transform="translate(580.7,387.7)" style="stroke:none; fill:black; font-family:arial; font-size:11.00pt; text-anchor:middle">
<text><tspan> 20</tspan>
</text>
</g>
<path d='M65.4,49.2 L65.4,367.2 L580.7,367.2 L580.7,49.2 L65.4,49.2 Z '></path>
<g transform="translate(323.0,28.7)" style="stroke:none; fill:black; font-family:arial; font-size:11.00pt; text-anchor:middle">
<text><tspan>SweetSpotSimilarity.computeLengthNorm(t)</tspan>
</text>
</g>
<path d='M364.6,123.0 L364.6,57.4 L573.0,57.4 L573.0,123.0 L364.6,123.0 Z '></path>
<path d='M364.6,57.4 L573.0,57.4 '></path>
</g>
<g style="fill:none; color:red; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
</g>
<g style="fill:none; color:black; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
<g transform="translate(518.6,69.7)" style="stroke:none; fill:black; font-family:arial; font-size:11.00pt; text-anchor:end">
<text><tspan>all defaults</tspan>
</text>
</g>
</g>
<g style="fill:none; color:red; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
<path d='M526.3,65.6 L565.3,65.6 M65.4,179.8 L70.6,169.6 L75.8,157.4 L81.0,142.7 L86.2,124.5 L91.4,103.5
L96.6,126.5 L101.8,144.4 L107.0,158.7 L112.2,170.7 L117.5,180.8 L122.7,189.4 L127.9,197.0 L133.1,203.7
L138.3,209.6 L143.5,215.0 L148.7,219.8 L153.9,224.2 L159.1,228.2 L164.3,231.9 L169.5,235.4 L174.7,238.5
L179.9,241.5 L185.1,244.3 L190.3,246.9 L195.5,249.3 L200.7,251.6 L205.9,253.7 L211.1,255.8 L216.3,257.7
L221.6,259.6 L226.8,261.3 L232.0,263.0 L237.2,264.6 L242.4,266.1 L247.6,267.5 L252.8,268.9 L258.0,270.3
L263.2,271.6 L268.4,272.8 L273.6,274.0 L278.8,275.1 L284.0,276.2 L289.2,277.3 L294.4,278.3 L299.6,279.3
L304.8,280.3 L310.0,281.2 L315.2,282.1 L320.4,283.0 L325.7,283.8 L330.9,284.6 L336.1,285.4 L341.3,286.2
L346.5,287.0 L351.7,287.7 L356.9,288.4 L362.1,289.1 L367.3,289.8 L372.5,290.4 L377.7,291.1 L382.9,291.7
L388.1,292.3 L393.3,292.9 L398.5,293.5 L403.7,294.1 L408.9,294.6 L414.1,295.2 L419.3,295.7 L424.5,296.2
L429.8,296.7 L435.0,297.2 L440.2,297.7 L445.4,298.2 L450.6,298.7 L455.8,299.1 L461.0,299.6 L466.2,300.0
L471.4,300.4 L476.6,300.9 L481.8,301.3 L487.0,301.7 L492.2,302.1 L497.4,302.5 L502.6,302.9 L507.8,303.3
L513.0,303.6 L518.2,304.0 L523.4,304.3 L528.6,304.7 L533.9,305.1 L539.1,305.4 L544.3,305.7 L549.5,306.1
L554.7,306.4 L559.9,306.7 L565.1,307.0 L570.3,307.3 L575.5,307.6 L580.7,307.9 '></path>
</g>
<g style="fill:none; color:green; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
</g>
<g style="fill:none; color:black; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
<g transform="translate(518.6,86.1)" style="stroke:none; fill:black; font-family:arial; font-size:11.00pt; text-anchor:end">
<text><tspan>steepness=0.2</tspan>
</text>
</g>
</g>
<g style="fill:none; color:green; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
<path d='M526.3,82.0 L565.3,82.0 M65.4,143.2 L70.6,136.5 L75.8,129.1 L81.0,120.9 L86.2,111.8 L91.4,102.7
L96.6,112.8 L101.8,121.8 L107.0,129.8 L112.2,137.2 L117.5,143.9 L122.7,150.0 L127.9,155.7 L133.1,160.9
L138.3,165.8 L143.5,170.3 L148.7,174.6 L153.9,178.6 L159.1,182.3 L164.3,185.9 L169.5,189.2 L174.7,192.3
L179.9,195.3 L185.1,198.2 L190.3,200.9 L195.5,203.5 L200.7,206.0 L205.9,208.3 L211.1,210.6 L216.3,212.7
L221.6,214.8 L226.8,216.8 L232.0,218.7 L237.2,220.6 L242.4,222.4 L247.6,224.1 L252.8,225.7 L258.0,227.3
L263.2,228.9 L268.4,230.4 L273.6,231.8 L278.8,233.2 L284.0,234.6 L289.2,235.9 L294.4,237.2 L299.6,238.4
L304.8,239.7 L310.0,240.8 L315.2,242.0 L320.4,243.1 L325.7,244.2 L330.9,245.2 L336.1,246.3 L341.3,247.3
L346.5,248.3 L351.7,249.2 L356.9,250.1 L362.1,251.1 L367.3,251.9 L372.5,252.8 L377.7,253.7 L382.9,254.5
L388.1,255.3 L393.3,256.1 L398.5,256.9 L403.7,257.7 L408.9,258.4 L414.1,259.1 L419.3,259.9 L424.5,260.6
L429.8,261.3 L435.0,261.9 L440.2,262.6 L445.4,263.3 L450.6,263.9 L455.8,264.5 L461.0,265.1 L466.2,265.7
L471.4,266.3 L476.6,266.9 L481.8,267.5 L487.0,268.1 L492.2,268.6 L497.4,269.2 L502.6,269.7 L507.8,270.2
L513.0,270.8 L518.2,271.3 L523.4,271.8 L528.6,272.3 L533.9,272.8 L539.1,273.2 L544.3,273.7 L549.5,274.2
L554.7,274.6 L559.9,275.1 L565.1,275.5 L570.3,276.0 L575.5,276.4 L580.7,276.8 '></path>
</g>
<g style="fill:none; color:blue; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
</g>
<g style="fill:none; color:black; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
<g transform="translate(518.6,102.5)" style="stroke:none; fill:black; font-family:arial; font-size:11.00pt; text-anchor:end">
<text><tspan>max=6, steepness=0.2</tspan>
</text>
</g>
</g>
<g style="fill:none; color:blue; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
<path d='M526.3,98.4 L565.3,98.4 M65.4,143.2 L70.6,136.5 L75.8,129.1 L81.0,120.9 L86.2,111.8 L91.4,102.2
L96.6,102.2 L101.8,102.2 L107.0,102.2 L112.2,102.2 L117.5,102.2 L122.7,102.2 L127.9,102.2 L133.1,102.2
L138.3,102.2 L143.5,102.2 L148.7,102.2 L153.9,102.2 L159.1,102.2 L164.3,102.2 L169.5,102.2 L174.7,102.2
L179.9,102.2 L185.1,102.2 L190.3,102.2 L195.5,102.2 L200.7,102.2 L205.9,102.2 L211.1,102.2 L216.3,102.2
L221.6,105.4 L226.8,115.1 L232.0,123.9 L237.2,131.7 L242.4,138.9 L247.6,145.5 L252.8,151.5 L258.0,157.0
L263.2,162.2 L268.4,167.0 L273.6,171.4 L278.8,175.6 L284.0,179.5 L289.2,183.2 L294.4,186.7 L299.6,190.0
L304.8,193.1 L310.0,196.1 L315.2,198.9 L320.4,201.6 L325.7,204.1 L330.9,206.6 L336.1,208.9 L341.3,211.1
L346.5,213.3 L351.7,215.3 L356.9,217.3 L362.1,219.2 L367.3,221.0 L372.5,222.8 L377.7,224.5 L382.9,226.1
L388.1,227.7 L393.3,229.3 L398.5,230.7 L403.7,232.2 L408.9,233.6 L414.1,234.9 L419.3,236.2 L424.5,237.5
L429.8,238.8 L435.0,240.0 L440.2,241.1 L445.4,242.3 L450.6,243.4 L455.8,244.4 L461.0,245.5 L466.2,246.5
L471.4,247.5 L476.6,248.5 L481.8,249.4 L487.0,250.4 L492.2,251.3 L497.4,252.2 L502.6,253.0 L507.8,253.9
L513.0,254.7 L518.2,255.5 L523.4,256.3 L528.6,257.1 L533.9,257.8 L539.1,258.6 L544.3,259.3 L549.5,260.0
L554.7,260.7 L559.9,261.4 L565.1,262.1 L570.3,262.8 L575.5,263.4 L580.7,264.0 '></path>
</g>
<g style="fill:none; color:cyan; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
</g>
<g style="fill:none; color:black; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
<g transform="translate(518.6,118.9)" style="stroke:none; fill:black; font-family:arial; font-size:11.00pt; text-anchor:end">
<text><tspan>min=3, max=5</tspan>
</text>
</g>
</g>
<g style="fill:none; color:cyan; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
<path d='M526.3,114.8 L565.3,114.8 M65.4,234.7 L70.6,231.2 L75.8,227.5 L81.0,223.4 L86.2,218.9 L91.4,213.9
L96.6,208.5 L101.8,202.4 L107.0,195.6 L112.2,187.8 L117.5,178.9 L122.7,168.4 L127.9,156.1 L133.1,141.1
L138.3,122.4 L143.5,102.2 L148.7,102.2 L153.9,102.2 L159.1,102.2 L164.3,102.2 L169.5,102.2 L174.7,102.2
L179.9,102.2 L185.1,102.2 L190.3,102.2 L195.5,108.6 L200.7,130.4 L205.9,147.5 L211.1,161.3 L216.3,172.8
L221.6,182.6 L226.8,191.0 L232.0,198.4 L237.2,204.9 L242.4,210.7 L247.6,216.0 L252.8,220.7 L258.0,225.0
L263.2,229.0 L268.4,232.6 L273.6,236.0 L278.8,239.1 L284.0,242.1 L289.2,244.8 L294.4,247.3 L299.6,249.8
L304.8,252.0 L310.0,254.2 L315.2,256.2 L320.4,258.1 L325.7,259.9 L330.9,261.6 L336.1,263.3 L341.3,264.9
L346.5,266.4 L351.7,267.8 L356.9,269.2 L362.1,270.5 L367.3,271.8 L372.5,273.0 L377.7,274.2 L382.9,275.3
L388.1,276.4 L393.3,277.5 L398.5,278.5 L403.7,279.5 L408.9,280.5 L414.1,281.4 L419.3,282.3 L424.5,283.1
L429.8,284.0 L435.0,284.8 L440.2,285.6 L445.4,286.4 L450.6,287.1 L455.8,287.8 L461.0,288.6 L466.2,289.2
L471.4,289.9 L476.6,290.6 L481.8,291.2 L487.0,291.8 L492.2,292.4 L497.4,293.0 L502.6,293.6 L507.8,294.2
L513.0,294.7 L518.2,295.3 L523.4,295.8 L528.6,296.3 L533.9,296.8 L539.1,297.3 L544.3,297.8 L549.5,298.3
L554.7,298.8 L559.9,299.2 L565.1,299.7 L570.3,300.1 L575.5,300.5 L580.7,300.9 '></path>
</g>
<g style="fill:none; color:black; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
<path d='M65.4,49.2 L65.4,367.2 L580.7,367.2 L580.7,49.2 L65.4,49.2 Z '></path>
</g>
</svg>

After

Width:  |  Height:  |  Size: 14 KiB

View File

@ -0,0 +1,67 @@
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# ####################################################################
#
# Instructions for generating SVG renderings of the functions
# used in SweetSpotSimilarity
#
# ####################################################################
#
#
set terminal svg size 600,400 dynamic enhanced fname 'arial' fsize 11 butt solid
set key inside left top vertical Right noreverse enhanced autotitles box linetype -1 linewidth 1.000
#
# ####### BASELINE TF
#
set output 'ss.baselineTf.svg'
set title "SweetSpotSimilarity.baselineTf(x)"
set xrange [0:20]
set yrange [-1:8]
btf(base,min,x)=(x <= min) ? base : sqrt(x+(base**2)-min)
#
plot btf(0,0,x) ti "all defaults", \
btf(1.5,0,x) ti "base=1.5", \
btf(0,5,x) ti "min=5", \
btf(1.5,5,x) ti "min=5, base=1.5"
#
# ####### HYPERBOLIC TF
#
set output 'ss.hyperbolicTf.svg'
set title "SweetSpotSimilarity.hyperbolcTf(x)"
set xrange [0:20]
set yrange [0:3]
htf(min,max,base,xoffset,x)=min+(max-min)/2*(((base**(x-xoffset)-base**-(x-xoffset))/(base**(x-xoffset)+base**-(x-xoffset)))+1)
#
plot htf(0,2,1.3,10,x) ti "all defaults", \
htf(0,2,1.3,5,x) ti "xoffset=5", \
htf(0,2,1.2,10,x) ti "base=1.2", \
htf(0,1.5,1.3,10,x) ti "max=1.5"
#
# ####### LENGTH NORM
#
set key inside right top
set output 'ss.computeLengthNorm.svg'
set title "SweetSpotSimilarity.computeLengthNorm(t)"
set xrange [0:20]
set yrange [0:1.2]
set mxtics 5
cln(min,max,steepness,x)=1/sqrt( steepness * (abs(x-min) + abs(x-max) - (max-min)) + 1 )
#
plot cln(1,1,0.5,x) ti "all defaults", \
cln(1,1,0.2,x) ti "steepness=0.2", \
cln(1,6,0.2,x) ti "max=6, steepness=0.2", \
cln(3,5,0.5,x) ti "min=3, max=5"

View File

@ -0,0 +1,193 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg viewBox="0 0 600 400"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<desc>Produced by GNUPLOT 4.2 patchlevel 5 </desc>
<defs>
<circle id='gpDot' r='0.5' stroke-width='0.5'/>
<path id='gpPt0' stroke-width='0.244' stroke='currentColor' d='M-1,0 h2 M0,-1 v2'/>
<path id='gpPt1' stroke-width='0.244' stroke='currentColor' d='M-1,-1 L1,1 M1,-1 L-1,1'/>
<path id='gpPt2' stroke-width='0.244' stroke='currentColor' d='M-1,0 L1,0 M0,-1 L0,1 M-1,-1 L1,1 M-1,1 L1,-1'/>
<rect id='gpPt3' stroke-width='0.244' stroke='currentColor' x='-1' y='-1' width='2' height='2'/>
<rect id='gpPt4' stroke-width='0.244' stroke='currentColor' fill='currentColor' x='-1' y='-1' width='2' height='2'/>
<circle id='gpPt5' stroke-width='0.244' stroke='currentColor' cx='0' cy='0' r='1'/>
<use xlink:href='#gpPt5' id='gpPt6' fill='currentColor' stroke='none'/>
<path id='gpPt7' stroke-width='0.244' stroke='currentColor' d='M0,-1.33 L-1.33,0.67 L1.33,0.67 z'/>
<use xlink:href='#gpPt7' id='gpPt8' fill='currentColor' stroke='none'/>
<use xlink:href='#gpPt7' id='gpPt9' stroke='currentColor' transform='rotate(180)'/>
<use xlink:href='#gpPt9' id='gpPt10' fill='currentColor' stroke='none'/>
<use xlink:href='#gpPt3' id='gpPt11' stroke='currentColor' transform='rotate(45)'/>
<use xlink:href='#gpPt11' id='gpPt12' fill='currentColor' stroke='none'/>
</defs>
<g style="fill:none; color:white; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
</g>
<g style="fill:none; color:black; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
<path d='M65.4,367.2 L73.6,367.2 M580.7,367.2 L572.5,367.2 '></path>
<g transform="translate(57.7,371.3)" style="stroke:none; fill:black; font-family:arial; font-size:11.00pt; text-anchor:end">
<text><tspan> 0</tspan>
</text>
</g>
<path d='M65.4,314.2 L73.6,314.2 M580.7,314.2 L572.5,314.2 '></path>
<g transform="translate(57.7,318.3)" style="stroke:none; fill:black; font-family:arial; font-size:11.00pt; text-anchor:end">
<text><tspan> 0.5</tspan>
</text>
</g>
<path d='M65.4,261.2 L73.6,261.2 M580.7,261.2 L572.5,261.2 '></path>
<g transform="translate(57.7,265.3)" style="stroke:none; fill:black; font-family:arial; font-size:11.00pt; text-anchor:end">
<text><tspan> 1</tspan>
</text>
</g>
<path d='M65.4,208.2 L73.6,208.2 M580.7,208.2 L572.5,208.2 '></path>
<g transform="translate(57.7,212.3)" style="stroke:none; fill:black; font-family:arial; font-size:11.00pt; text-anchor:end">
<text><tspan> 1.5</tspan>
</text>
</g>
<path d='M65.4,155.2 L73.6,155.2 M580.7,155.2 L572.5,155.2 '></path>
<g transform="translate(57.7,159.3)" style="stroke:none; fill:black; font-family:arial; font-size:11.00pt; text-anchor:end">
<text><tspan> 2</tspan>
</text>
</g>
<path d='M65.4,102.2 L73.6,102.2 M580.7,102.2 L572.5,102.2 '></path>
<g transform="translate(57.7,106.3)" style="stroke:none; fill:black; font-family:arial; font-size:11.00pt; text-anchor:end">
<text><tspan> 2.5</tspan>
</text>
</g>
<path d='M65.4,49.2 L73.6,49.2 M580.7,49.2 L572.5,49.2 '></path>
<g transform="translate(57.7,53.3)" style="stroke:none; fill:black; font-family:arial; font-size:11.00pt; text-anchor:end">
<text><tspan> 3</tspan>
</text>
</g>
<path d='M65.4,367.2 L65.4,359.0 M65.4,49.2 L65.4,57.4 '></path>
<g transform="translate(65.4,387.7)" style="stroke:none; fill:black; font-family:arial; font-size:11.00pt; text-anchor:middle">
<text><tspan> 0</tspan>
</text>
</g>
<path d='M194.2,367.2 L194.2,359.0 M194.2,49.2 L194.2,57.4 '></path>
<g transform="translate(194.2,387.7)" style="stroke:none; fill:black; font-family:arial; font-size:11.00pt; text-anchor:middle">
<text><tspan> 5</tspan>
</text>
</g>
<path d='M323.1,367.2 L323.1,359.0 M323.1,49.2 L323.1,57.4 '></path>
<g transform="translate(323.1,387.7)" style="stroke:none; fill:black; font-family:arial; font-size:11.00pt; text-anchor:middle">
<text><tspan> 10</tspan>
</text>
</g>
<path d='M451.9,367.2 L451.9,359.0 M451.9,49.2 L451.9,57.4 '></path>
<g transform="translate(451.9,387.7)" style="stroke:none; fill:black; font-family:arial; font-size:11.00pt; text-anchor:middle">
<text><tspan> 15</tspan>
</text>
</g>
<path d='M580.7,367.2 L580.7,359.0 M580.7,49.2 L580.7,57.4 '></path>
<g transform="translate(580.7,387.7)" style="stroke:none; fill:black; font-family:arial; font-size:11.00pt; text-anchor:middle">
<text><tspan> 20</tspan>
</text>
</g>
<path d='M65.4,49.2 L65.4,367.2 L580.7,367.2 L580.7,49.2 L65.4,49.2 Z '></path>
<g transform="translate(323.0,28.7)" style="stroke:none; fill:black; font-family:arial; font-size:11.00pt; text-anchor:middle">
<text><tspan>SweetSpotSimilarity.hyperbolcTf(x)</tspan>
</text>
</g>
<path d='M73.1,123.0 L73.1,57.4 L219.9,57.4 L219.9,123.0 L73.1,123.0 Z '></path>
<path d='M73.1,57.4 L219.9,57.4 '></path>
</g>
<g style="fill:none; color:red; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
</g>
<g style="fill:none; color:black; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
<g transform="translate(165.5,69.7)" style="stroke:none; fill:black; font-family:arial; font-size:11.00pt; text-anchor:end">
<text><tspan>all defaults</tspan>
</text>
</g>
</g>
<g style="fill:none; color:red; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
<path d='M173.2,65.6 L212.2,65.6 M65.4,366.1 L70.6,366.0 L75.8,365.8 L81.0,365.7 L86.2,365.5 L91.4,365.3
L96.6,365.1 L101.8,364.9 L107.0,364.6 L112.2,364.3 L117.5,364.0 L122.7,363.7 L127.9,363.3 L133.1,362.9
L138.3,362.4 L143.5,361.9 L148.7,361.3 L153.9,360.6 L159.1,359.9 L164.3,359.2 L169.5,358.3 L174.7,357.3
L179.9,356.3 L185.1,355.2 L190.3,353.9 L195.5,352.5 L200.7,351.0 L205.9,349.3 L211.1,347.5 L216.3,345.5
L221.6,343.4 L226.8,341.1 L232.0,338.5 L237.2,335.8 L242.4,332.8 L247.6,329.7 L252.8,326.3 L258.0,322.7
L263.2,318.8 L268.4,314.8 L273.6,310.5 L278.8,306.0 L284.0,301.2 L289.2,296.3 L294.4,291.3 L299.6,286.0
L304.8,280.6 L310.0,275.2 L315.2,269.6 L320.4,264.0 L325.7,258.4 L330.9,252.8 L336.1,247.2 L341.3,241.8
L346.5,236.4 L351.7,231.1 L356.9,226.1 L362.1,221.2 L367.3,216.4 L372.5,211.9 L377.7,207.6 L382.9,203.6
L388.1,199.7 L393.3,196.1 L398.5,192.7 L403.7,189.6 L408.9,186.6 L414.1,183.9 L419.3,181.3 L424.5,179.0
L429.8,176.9 L435.0,174.9 L440.2,173.1 L445.4,171.4 L450.6,169.9 L455.8,168.5 L461.0,167.2 L466.2,166.1
L471.4,165.1 L476.6,164.1 L481.8,163.2 L487.0,162.5 L492.2,161.8 L497.4,161.1 L502.6,160.5 L507.8,160.0
L513.0,159.5 L518.2,159.1 L523.4,158.7 L528.6,158.4 L533.9,158.1 L539.1,157.8 L544.3,157.5 L549.5,157.3
L554.7,157.1 L559.9,156.9 L565.1,156.7 L570.3,156.6 L575.5,156.4 L580.7,156.3 '></path>
</g>
<g style="fill:none; color:green; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
</g>
<g style="fill:none; color:black; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
<g transform="translate(165.5,86.1)" style="stroke:none; fill:black; font-family:arial; font-size:11.00pt; text-anchor:end">
<text><tspan>xoffset=5</tspan>
</text>
</g>
</g>
<g style="fill:none; color:green; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
<path d='M173.2,82.0 L212.2,82.0 M65.4,352.9 L70.6,351.4 L75.8,349.8 L81.0,348.0 L86.2,346.0 L91.4,343.9
L96.6,341.7 L101.8,339.2 L107.0,336.5 L112.2,333.6 L117.5,330.5 L122.7,327.2 L127.9,323.6 L133.1,319.8
L138.3,315.8 L143.5,311.6 L148.7,307.1 L153.9,302.4 L159.1,297.6 L164.3,292.5 L169.5,287.3 L174.7,282.0
L179.9,276.5 L185.1,271.0 L190.3,265.4 L195.5,259.8 L200.7,254.2 L205.9,248.6 L211.1,243.1 L216.3,237.7
L221.6,232.4 L226.8,227.3 L232.0,222.4 L237.2,217.6 L242.4,213.0 L247.6,208.7 L252.8,204.6 L258.0,200.7
L263.2,197.0 L268.4,193.5 L273.6,190.3 L278.8,187.3 L284.0,184.5 L289.2,182.0 L294.4,179.6 L299.6,177.4
L304.8,175.4 L310.0,173.5 L315.2,171.8 L320.4,170.3 L325.7,168.8 L330.9,167.6 L336.1,166.4 L341.3,165.3
L346.5,164.3 L351.7,163.5 L356.9,162.6 L362.1,161.9 L367.3,161.3 L372.5,160.7 L377.7,160.1 L382.9,159.6
L388.1,159.2 L393.3,158.8 L398.5,158.5 L403.7,158.1 L408.9,157.8 L414.1,157.6 L419.3,157.3 L424.5,157.1
L429.8,156.9 L435.0,156.8 L440.2,156.6 L445.4,156.5 L450.6,156.3 L455.8,156.2 L461.0,156.1 L466.2,156.0
L471.4,155.9 L476.6,155.9 L481.8,155.8 L487.0,155.7 L492.2,155.7 L497.4,155.6 L502.6,155.6 L507.8,155.6
L513.0,155.5 L518.2,155.5 L523.4,155.5 L528.6,155.4 L533.9,155.4 L539.1,155.4 L544.3,155.4 L549.5,155.4
L554.7,155.3 L559.9,155.3 L565.1,155.3 L570.3,155.3 L575.5,155.3 L580.7,155.3 '></path>
</g>
<g style="fill:none; color:blue; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
</g>
<g style="fill:none; color:black; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
<g transform="translate(165.5,102.5)" style="stroke:none; fill:black; font-family:arial; font-size:11.00pt; text-anchor:end">
<text><tspan>base=1.2</tspan>
</text>
</g>
</g>
<g style="fill:none; color:blue; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
<path d='M173.2,98.4 L212.2,98.4 M65.4,361.8 L70.6,361.4 L75.8,361.0 L81.0,360.5 L86.2,360.0 L91.4,359.5
L96.6,358.9 L101.8,358.3 L107.0,357.7 L112.2,357.0 L117.5,356.2 L122.7,355.5 L127.9,354.6 L133.1,353.7
L138.3,352.7 L143.5,351.7 L148.7,350.6 L153.9,349.5 L159.1,348.2 L164.3,346.9 L169.5,345.5 L174.7,344.1
L179.9,342.5 L185.1,340.8 L190.3,339.1 L195.5,337.3 L200.7,335.3 L205.9,333.3 L211.1,331.1 L216.3,328.8
L221.6,326.5 L226.8,324.0 L232.0,321.4 L237.2,318.7 L242.4,315.9 L247.6,313.0 L252.8,310.0 L258.0,306.8
L263.2,303.6 L268.4,300.3 L273.6,296.8 L278.8,293.3 L284.0,289.8 L289.2,286.1 L294.4,282.4 L299.6,278.6
L304.8,274.8 L310.0,270.9 L315.2,267.1 L320.4,263.2 L325.7,259.2 L330.9,255.3 L336.1,251.5 L341.3,247.6
L346.5,243.8 L351.7,240.0 L356.9,236.3 L362.1,232.6 L367.3,229.1 L372.5,225.6 L377.7,222.1 L382.9,218.8
L388.1,215.6 L393.3,212.4 L398.5,209.4 L403.7,206.5 L408.9,203.7 L414.1,201.0 L419.3,198.4 L424.5,195.9
L429.8,193.6 L435.0,191.3 L440.2,189.1 L445.4,187.1 L450.6,185.1 L455.8,183.3 L461.0,181.6 L466.2,179.9
L471.4,178.3 L476.6,176.9 L481.8,175.5 L487.0,174.2 L492.2,172.9 L497.4,171.8 L502.6,170.7 L507.8,169.7
L513.0,168.7 L518.2,167.8 L523.4,166.9 L528.6,166.2 L533.9,165.4 L539.1,164.7 L544.3,164.1 L549.5,163.5
L554.7,162.9 L559.9,162.4 L565.1,161.9 L570.3,161.4 L575.5,161.0 L580.7,160.6 '></path>
</g>
<g style="fill:none; color:cyan; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
</g>
<g style="fill:none; color:black; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
<g transform="translate(165.5,118.9)" style="stroke:none; fill:black; font-family:arial; font-size:11.00pt; text-anchor:end">
<text><tspan>max=1.5</tspan>
</text>
</g>
</g>
<g style="fill:none; color:cyan; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
<path d='M173.2,114.8 L212.2,114.8 M65.4,366.4 L70.6,366.3 L75.8,366.2 L81.0,366.1 L86.2,365.9 L91.4,365.8
L96.6,365.6 L101.8,365.5 L107.0,365.3 L112.2,365.1 L117.5,364.8 L122.7,364.6 L127.9,364.3 L133.1,363.9
L138.3,363.6 L143.5,363.2 L148.7,362.8 L153.9,362.3 L159.1,361.8 L164.3,361.2 L169.5,360.5 L174.7,359.8
L179.9,359.0 L185.1,358.2 L190.3,357.2 L195.5,356.2 L200.7,355.0 L205.9,353.8 L211.1,352.4 L216.3,351.0
L221.6,349.3 L226.8,347.6 L232.0,345.7 L237.2,343.6 L242.4,341.4 L247.6,339.1 L252.8,336.5 L258.0,333.8
L263.2,330.9 L268.4,327.9 L273.6,324.7 L278.8,321.3 L284.0,317.7 L289.2,314.1 L294.4,310.2 L299.6,306.3
L304.8,302.3 L310.0,298.2 L315.2,294.0 L320.4,289.8 L325.7,285.6 L330.9,281.4 L336.1,277.2 L341.3,273.1
L346.5,269.1 L351.7,265.2 L356.9,261.3 L362.1,257.7 L367.3,254.1 L372.5,250.7 L377.7,247.5 L382.9,244.5
L388.1,241.6 L393.3,238.9 L398.5,236.3 L403.7,234.0 L408.9,231.8 L414.1,229.7 L419.3,227.8 L424.5,226.1
L429.8,224.4 L435.0,223.0 L440.2,221.6 L445.4,220.4 L450.6,219.2 L455.8,218.2 L461.0,217.2 L466.2,216.4
L471.4,215.6 L476.6,214.9 L481.8,214.2 L487.0,213.6 L492.2,213.1 L497.4,212.6 L502.6,212.2 L507.8,211.8
L513.0,211.5 L518.2,211.1 L523.4,210.8 L528.6,210.6 L533.9,210.3 L539.1,210.1 L544.3,209.9 L549.5,209.8
L554.7,209.6 L559.9,209.5 L565.1,209.3 L570.3,209.2 L575.5,209.1 L580.7,209.0 '></path>
</g>
<g style="fill:none; color:black; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
<path d='M65.4,49.2 L65.4,367.2 L580.7,367.2 L580.7,49.2 L65.4,49.2 Z '></path>
</g>
</svg>

After

Width:  |  Height:  |  Size: 13 KiB

View File

@ -20,8 +20,6 @@ import java.io.File;
import org.apache.lucene.analysis.MockAnalyzer; import org.apache.lucene.analysis.MockAnalyzer;
import org.apache.lucene.document.Document; import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.StringField;
import org.apache.lucene.index.IndexWriterConfig.OpenMode; import org.apache.lucene.index.IndexWriterConfig.OpenMode;
import org.apache.lucene.store.Directory; import org.apache.lucene.store.Directory;
import org.apache.lucene.util.LuceneTestCase; import org.apache.lucene.util.LuceneTestCase;

View File

@ -18,6 +18,7 @@ package org.apache.lucene.sandbox.queries;
import org.apache.lucene.index.*; import org.apache.lucene.index.*;
import org.apache.lucene.search.DocIdSet; import org.apache.lucene.search.DocIdSet;
import org.apache.lucene.search.DocIdSetIterator;
import org.apache.lucene.search.Filter; import org.apache.lucene.search.Filter;
import org.apache.lucene.util.Bits; import org.apache.lucene.util.Bits;
import org.apache.lucene.util.BytesRef; import org.apache.lucene.util.BytesRef;
@ -94,7 +95,7 @@ public class DuplicateFilter extends Filter {
} else { } else {
docs = termsEnum.docs(acceptDocs, docs, false); docs = termsEnum.docs(acceptDocs, docs, false);
int doc = docs.nextDoc(); int doc = docs.nextDoc();
if (doc != DocsEnum.NO_MORE_DOCS) { if (doc != DocIdSetIterator.NO_MORE_DOCS) {
if (keepMode == KeepMode.KM_USE_FIRST_OCCURRENCE) { if (keepMode == KeepMode.KM_USE_FIRST_OCCURRENCE) {
bits.set(doc); bits.set(doc);
} else { } else {
@ -102,7 +103,7 @@ public class DuplicateFilter extends Filter {
while (true) { while (true) {
lastDoc = doc; lastDoc = doc;
doc = docs.nextDoc(); doc = docs.nextDoc();
if (doc == DocsEnum.NO_MORE_DOCS) { if (doc == DocIdSetIterator.NO_MORE_DOCS) {
break; break;
} }
} }
@ -134,7 +135,7 @@ public class DuplicateFilter extends Filter {
// unset potential duplicates // unset potential duplicates
docs = termsEnum.docs(acceptDocs, docs, false); docs = termsEnum.docs(acceptDocs, docs, false);
int doc = docs.nextDoc(); int doc = docs.nextDoc();
if (doc != DocsEnum.NO_MORE_DOCS) { if (doc != DocIdSetIterator.NO_MORE_DOCS) {
if (keepMode == KeepMode.KM_USE_FIRST_OCCURRENCE) { if (keepMode == KeepMode.KM_USE_FIRST_OCCURRENCE) {
doc = docs.nextDoc(); doc = docs.nextDoc();
} }
@ -145,7 +146,7 @@ public class DuplicateFilter extends Filter {
lastDoc = doc; lastDoc = doc;
bits.clear(lastDoc); bits.clear(lastDoc);
doc = docs.nextDoc(); doc = docs.nextDoc();
if (doc == DocsEnum.NO_MORE_DOCS) { if (doc == DocIdSetIterator.NO_MORE_DOCS) {
break; break;
} }
} }

View File

@ -90,7 +90,7 @@ public final class SlowCollatedStringComparator extends FieldComparator<String>
} }
@Override @Override
public FieldComparator setNextReader(AtomicReaderContext context) throws IOException { public FieldComparator<String> setNextReader(AtomicReaderContext context) throws IOException {
currentDocTerms = FieldCache.DEFAULT.getTerms(context.reader(), field); currentDocTerms = FieldCache.DEFAULT.getTerms(context.reader(), field);
return this; return this;
} }

View File

@ -25,6 +25,7 @@ import org.apache.lucene.document.Document;
import org.apache.lucene.document.StringField; import org.apache.lucene.document.StringField;
import org.apache.lucene.document.TextField; import org.apache.lucene.document.TextField;
import org.apache.lucene.index.*; import org.apache.lucene.index.*;
import org.apache.lucene.search.DocIdSetIterator;
import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.ScoreDoc; import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TermQuery; import org.apache.lucene.search.TermQuery;
@ -142,7 +143,7 @@ public class DuplicateFilterTest extends LuceneTestCase {
false); false);
int lastDoc = 0; int lastDoc = 0;
while (td.nextDoc() != DocsEnum.NO_MORE_DOCS) { while (td.nextDoc() != DocIdSetIterator.NO_MORE_DOCS) {
lastDoc = td.docID(); lastDoc = td.docID();
} }
assertEquals("Duplicate urls should return last doc", lastDoc, hit.doc); assertEquals("Duplicate urls should return last doc", lastDoc, hit.doc);

View File

@ -91,7 +91,7 @@ public class TestSlowCollationMethods extends LuceneTestCase {
public void testSort() throws Exception { public void testSort() throws Exception {
SortField sf = new SortField("field", new FieldComparatorSource() { SortField sf = new SortField("field", new FieldComparatorSource() {
@Override @Override
public FieldComparator newComparator(String fieldname, int numHits, int sortPos, boolean reversed) throws IOException { public FieldComparator<String> newComparator(String fieldname, int numHits, int sortPos, boolean reversed) throws IOException {
return new SlowCollatedStringComparator(numHits, fieldname, collator); return new SlowCollatedStringComparator(numHits, fieldname, collator);
} }
}); });

View File

@ -83,31 +83,4 @@ public class TestSpanRegexQuery extends LuceneTestCase {
reader.close(); reader.close();
directory.close(); directory.close();
} }
private void createRAMDirectories() throws CorruptIndexException,
LockObtainFailedException, IOException {
// creating a document to store
Document lDoc = new Document();
FieldType customType = new FieldType(TextField.TYPE_UNSTORED);
customType.setOmitNorms(true);
lDoc.add(newField("field", "a1 b1", customType));
// creating a document to store
Document lDoc2 = new Document();
lDoc2.add(newField("field", "a2 b2", customType));
// creating first index writer
IndexWriter writerA = new IndexWriter(indexStoreA, newIndexWriterConfig(
TEST_VERSION_CURRENT, new MockAnalyzer(random)).setOpenMode(OpenMode.CREATE));
writerA.addDocument(lDoc);
writerA.forceMerge(1);
writerA.close();
// creating second index writer
IndexWriter writerB = new IndexWriter(indexStoreB, newIndexWriterConfig(
TEST_VERSION_CURRENT, new MockAnalyzer(random)).setOpenMode(OpenMode.CREATE));
writerB.addDocument(lDoc2);
writerB.forceMerge(1);
writerB.close();
}
} }

View File

@ -52,9 +52,10 @@ public class PositionIncrementAttributeImpl extends AttributeImpl implements Pos
* @param positionIncrement the distance from the prior term * @param positionIncrement the distance from the prior term
*/ */
public void setPositionIncrement(int positionIncrement) { public void setPositionIncrement(int positionIncrement) {
if (positionIncrement < 0) if (positionIncrement < 0) {
throw new IllegalArgumentException throw new IllegalArgumentException
("Increment must be zero or greater: " + positionIncrement); ("Increment must be zero or greater: got " + positionIncrement);
}
this.positionIncrement = positionIncrement; this.positionIncrement = positionIncrement;
} }
@ -77,7 +78,8 @@ public class PositionIncrementAttributeImpl extends AttributeImpl implements Pos
} }
if (other instanceof PositionIncrementAttributeImpl) { if (other instanceof PositionIncrementAttributeImpl) {
return positionIncrement == ((PositionIncrementAttributeImpl) other).positionIncrement; PositionIncrementAttributeImpl _other = (PositionIncrementAttributeImpl) other;
return positionIncrement == _other.positionIncrement;
} }
return false; return false;
@ -93,5 +95,4 @@ public class PositionIncrementAttributeImpl extends AttributeImpl implements Pos
PositionIncrementAttribute t = (PositionIncrementAttribute) target; PositionIncrementAttribute t = (PositionIncrementAttribute) target;
t.setPositionIncrement(positionIncrement); t.setPositionIncrement(positionIncrement);
} }
} }

View File

@ -1,4 +1,4 @@
package org.apache.solr.uima.processor.ae; package org.apache.lucene.analysis.tokenattributes;
/** /**
* Licensed to the Apache Software Foundation (ASF) under one or more * Licensed to the Apache Software Foundation (ASF) under one or more
@ -17,16 +17,25 @@ package org.apache.solr.uima.processor.ae;
* limitations under the License. * limitations under the License.
*/ */
import org.apache.uima.analysis_engine.AnalysisEngine; import org.apache.lucene.util.Attribute;
import org.apache.uima.resource.ResourceInitializationException;
/** /** The positionLength determines how many positions this
* provide an Apache UIMA {@link AnalysisEngine} * token spans. Very few analyzer components actually
* * produce this attribute, and indexing ignores it, but
* it's useful to express the graph structure naturally
* produced by decompounding, word splitting/joining,
* synonym filtering, etc.
* *
*/ * <p>The default value is one. */
public interface AEProvider {
public AnalysisEngine getAE() throws ResourceInitializationException; public interface PositionLengthAttribute extends Attribute {
/** @param positionLength how many positions this token
* spans. */
public void setPositionLength(int positionLength);
/** Returns the position length of this Token.
* @see #setPositionLength
*/
public int getPositionLength();
} }

View File

@ -0,0 +1,73 @@
package org.apache.lucene.analysis.tokenattributes;
/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import org.apache.lucene.util.AttributeImpl;
/** See {@link PositionLengthAttribute}. */
public class PositionLengthAttributeImpl extends AttributeImpl implements PositionLengthAttribute, Cloneable {
private int positionLength = 1;
/** @param positionLength how many positions this token
* spans. NOTE: this is optional, and most analyzers
* don't change the default value (1). */
public void setPositionLength(int positionLength) {
if (positionLength < 1) {
throw new IllegalArgumentException
("Position length must be 1 or greater: got " + positionLength);
}
this.positionLength = positionLength;
}
/** Returns the position length of this Token.
* @see #setPositionLength
*/
public int getPositionLength() {
return positionLength;
}
@Override
public void clear() {
this.positionLength = 1;
}
@Override
public boolean equals(Object other) {
if (other == this) {
return true;
}
if (other instanceof PositionLengthAttributeImpl) {
PositionLengthAttributeImpl _other = (PositionLengthAttributeImpl) other;
return positionLength == _other.positionLength;
}
return false;
}
@Override
public int hashCode() {
return positionLength;
}
@Override
public void copyTo(AttributeImpl target) {
PositionLengthAttribute t = (PositionLengthAttribute) target;
t.setPositionLength(positionLength);
}
}

View File

@ -778,9 +778,6 @@ public class BlockTermsReader extends FieldsProducer {
return state.ord; return state.ord;
} }
private void doPendingSeek() {
}
/* Does initial decode of next block of terms; this /* Does initial decode of next block of terms; this
doesn't actually decode the docFreq, totalTermFreq, doesn't actually decode the docFreq, totalTermFreq,
postings details (frq/prx offset, etc.) metadata; postings details (frq/prx offset, etc.) metadata;

View File

@ -35,7 +35,6 @@ import org.apache.lucene.index.IndexFileNames;
import org.apache.lucene.index.SegmentInfo; import org.apache.lucene.index.SegmentInfo;
import org.apache.lucene.index.TermState; import org.apache.lucene.index.TermState;
import org.apache.lucene.index.Terms; import org.apache.lucene.index.Terms;
import org.apache.lucene.index.TermsEnum.SeekStatus;
import org.apache.lucene.index.TermsEnum; import org.apache.lucene.index.TermsEnum;
import org.apache.lucene.store.ByteArrayDataInput; import org.apache.lucene.store.ByteArrayDataInput;
import org.apache.lucene.store.Directory; import org.apache.lucene.store.Directory;
@ -488,7 +487,7 @@ public class BlockTreeTermsReader extends FieldsProducer {
private Frame[] stack; private Frame[] stack;
@SuppressWarnings("unchecked") private FST.Arc<BytesRef>[] arcs = new FST.Arc[5]; @SuppressWarnings({"rawtypes","unchecked"}) private FST.Arc<BytesRef>[] arcs = new FST.Arc[5];
private final RunAutomaton runAutomaton; private final RunAutomaton runAutomaton;
private final CompiledAutomaton compiledAutomaton; private final CompiledAutomaton compiledAutomaton;
@ -821,7 +820,8 @@ public class BlockTreeTermsReader extends FieldsProducer {
private FST.Arc<BytesRef> getArc(int ord) { private FST.Arc<BytesRef> getArc(int ord) {
if (ord >= arcs.length) { if (ord >= arcs.length) {
@SuppressWarnings("unchecked") final FST.Arc<BytesRef>[] next = new FST.Arc[ArrayUtil.oversize(1+ord, RamUsageEstimator.NUM_BYTES_OBJECT_REF)]; @SuppressWarnings({"rawtypes","unchecked"}) final FST.Arc<BytesRef>[] next =
new FST.Arc[ArrayUtil.oversize(1+ord, RamUsageEstimator.NUM_BYTES_OBJECT_REF)];
System.arraycopy(arcs, 0, next, 0, arcs.length); System.arraycopy(arcs, 0, next, 0, arcs.length);
for(int arcOrd=arcs.length;arcOrd<next.length;arcOrd++) { for(int arcOrd=arcs.length;arcOrd<next.length;arcOrd++) {
next[arcOrd] = new FST.Arc<BytesRef>(); next[arcOrd] = new FST.Arc<BytesRef>();
@ -1198,7 +1198,8 @@ public class BlockTreeTermsReader extends FieldsProducer {
final BytesRef term = new BytesRef(); final BytesRef term = new BytesRef();
private final FST.BytesReader fstReader; private final FST.BytesReader fstReader;
@SuppressWarnings("unchecked") private FST.Arc<BytesRef>[] arcs = new FST.Arc[1]; @SuppressWarnings({"rawtypes","unchecked"}) private FST.Arc<BytesRef>[] arcs =
new FST.Arc[1];
public SegmentTermsEnum() throws IOException { public SegmentTermsEnum() throws IOException {
//if (DEBUG) System.out.println("BTTR.init seg=" + segment); //if (DEBUG) System.out.println("BTTR.init seg=" + segment);
@ -1354,7 +1355,8 @@ public class BlockTreeTermsReader extends FieldsProducer {
private FST.Arc<BytesRef> getArc(int ord) { private FST.Arc<BytesRef> getArc(int ord) {
if (ord >= arcs.length) { if (ord >= arcs.length) {
@SuppressWarnings("unchecked") final FST.Arc<BytesRef>[] next = new FST.Arc[ArrayUtil.oversize(1+ord, RamUsageEstimator.NUM_BYTES_OBJECT_REF)]; @SuppressWarnings({"rawtypes","unchecked"}) final FST.Arc<BytesRef>[] next =
new FST.Arc[ArrayUtil.oversize(1+ord, RamUsageEstimator.NUM_BYTES_OBJECT_REF)];
System.arraycopy(arcs, 0, next, 0, arcs.length); System.arraycopy(arcs, 0, next, 0, arcs.length);
for(int arcOrd=arcs.length;arcOrd<next.length;arcOrd++) { for(int arcOrd=arcs.length;arcOrd<next.length;arcOrd++) {
next[arcOrd] = new FST.Arc<BytesRef>(); next[arcOrd] = new FST.Arc<BytesRef>();
@ -1944,6 +1946,7 @@ public class BlockTreeTermsReader extends FieldsProducer {
} }
} }
@SuppressWarnings("unused")
private void printSeekState() throws IOException { private void printSeekState() throws IOException {
if (currentFrame == staticFrame) { if (currentFrame == staticFrame) {
System.out.println(" no prior seek"); System.out.println(" no prior seek");

View File

@ -640,7 +640,7 @@ public class BlockTreeTermsWriter extends FieldsConsumer {
// for debugging // for debugging
@SuppressWarnings("unused") @SuppressWarnings("unused")
private String toString(BytesRef b) { private String toString(BytesRef b) {
try { try {
return b.utf8ToString() + " " + b; return b.utf8ToString() + " " + b;
} catch (Throwable t) { } catch (Throwable t) {

View File

@ -21,13 +21,9 @@ import java.io.Closeable;
import java.io.IOException; import java.io.IOException;
import org.apache.lucene.index.Fields; import org.apache.lucene.index.Fields;
import org.apache.lucene.index.FieldsEnum;
import org.apache.lucene.index.Terms;
/** Abstract API that consumes terms, doc, freq, prox and /** Abstract API that produces terms, doc, freq, prox and
* payloads postings. Concrete implementations of this * payloads postings.
* actually do "something" with the postings (write it into
* the index in a specific format).
* *
* @lucene.experimental * @lucene.experimental
*/ */

View File

@ -227,8 +227,6 @@ public class FixedGapTermsIndexReader extends TermsIndexReaderBase {
private final class FieldIndexData { private final class FieldIndexData {
final private FieldInfo fieldInfo;
volatile CoreFieldIndex coreIndex; volatile CoreFieldIndex coreIndex;
private final long indexStart; private final long indexStart;
@ -241,7 +239,6 @@ public class FixedGapTermsIndexReader extends TermsIndexReaderBase {
public FieldIndexData(FieldInfo fieldInfo, int numIndexTerms, long indexStart, long termsStart, long packedIndexStart, public FieldIndexData(FieldInfo fieldInfo, int numIndexTerms, long indexStart, long termsStart, long packedIndexStart,
long packedOffsetsStart) throws IOException { long packedOffsetsStart) throws IOException {
this.fieldInfo = fieldInfo;
this.termsStart = termsStart; this.termsStart = termsStart;
this.indexStart = indexStart; this.indexStart = indexStart;
this.packedIndexStart = packedIndexStart; this.packedIndexStart = packedIndexStart;

View File

@ -53,7 +53,8 @@ public class FixedGapTermsIndexWriter extends TermsIndexWriterBase {
final private int termIndexInterval; final private int termIndexInterval;
private final List<SimpleFieldWriter> fields = new ArrayList<SimpleFieldWriter>(); private final List<SimpleFieldWriter> fields = new ArrayList<SimpleFieldWriter>();
private final FieldInfos fieldInfos; // unread
@SuppressWarnings("unused") private final FieldInfos fieldInfos; // unread
public FixedGapTermsIndexWriter(SegmentWriteState state) throws IOException { public FixedGapTermsIndexWriter(SegmentWriteState state) throws IOException {
final String indexFileName = IndexFileNames.segmentFileName(state.segmentName, state.segmentSuffix, TERMS_INDEX_EXTENSION); final String indexFileName = IndexFileNames.segmentFileName(state.segmentName, state.segmentSuffix, TERMS_INDEX_EXTENSION);

View File

@ -22,7 +22,6 @@ import java.io.IOException;
import java.util.Comparator; import java.util.Comparator;
import org.apache.lucene.index.DocsAndPositionsEnum; import org.apache.lucene.index.DocsAndPositionsEnum;
import org.apache.lucene.index.DocsEnum;
import org.apache.lucene.index.FieldInfo; import org.apache.lucene.index.FieldInfo;
import org.apache.lucene.index.FieldInfos; import org.apache.lucene.index.FieldInfos;
import org.apache.lucene.index.Fields; import org.apache.lucene.index.Fields;
@ -30,6 +29,7 @@ import org.apache.lucene.index.FieldsEnum;
import org.apache.lucene.index.MergeState; import org.apache.lucene.index.MergeState;
import org.apache.lucene.index.Terms; import org.apache.lucene.index.Terms;
import org.apache.lucene.index.TermsEnum; import org.apache.lucene.index.TermsEnum;
import org.apache.lucene.search.DocIdSetIterator;
import org.apache.lucene.store.DataInput; import org.apache.lucene.store.DataInput;
import org.apache.lucene.util.Bits; import org.apache.lucene.util.Bits;
import org.apache.lucene.util.BytesRef; import org.apache.lucene.util.BytesRef;
@ -236,7 +236,7 @@ public abstract class TermVectorsWriter implements Closeable {
if (docsAndPositionsEnum != null) { if (docsAndPositionsEnum != null) {
final int docID = docsAndPositionsEnum.nextDoc(); final int docID = docsAndPositionsEnum.nextDoc();
assert docID != DocsEnum.NO_MORE_DOCS; assert docID != DocIdSetIterator.NO_MORE_DOCS;
assert docsAndPositionsEnum.freq() == freq; assert docsAndPositionsEnum.freq() == freq;
for(int posUpto=0; posUpto<freq; posUpto++) { for(int posUpto=0; posUpto<freq; posUpto++) {

View File

@ -22,7 +22,6 @@ import org.apache.lucene.util.BytesRef;
import java.io.IOException; import java.io.IOException;
import java.io.Closeable; import java.io.Closeable;
import java.util.Collection;
// TODO // TODO

View File

@ -54,7 +54,8 @@ public class VariableGapTermsIndexWriter extends TermsIndexWriterBase {
final static int VERSION_CURRENT = VERSION_START; final static int VERSION_CURRENT = VERSION_START;
private final List<FSTFieldWriter> fields = new ArrayList<FSTFieldWriter>(); private final List<FSTFieldWriter> fields = new ArrayList<FSTFieldWriter>();
private final FieldInfos fieldInfos; // unread
@SuppressWarnings("unused") private final FieldInfos fieldInfos; // unread
private final IndexTermSelector policy; private final IndexTermSelector policy;
/** @lucene.experimental */ /** @lucene.experimental */
@ -214,7 +215,6 @@ public class VariableGapTermsIndexWriter extends TermsIndexWriterBase {
private final long startTermsFilePointer; private final long startTermsFilePointer;
final FieldInfo fieldInfo; final FieldInfo fieldInfo;
int numIndexTerms;
FST<Long> fst; FST<Long> fst;
final long indexStart; final long indexStart;

View File

@ -32,7 +32,6 @@ import org.apache.lucene.codecs.lucene40.Lucene40PostingsWriter;
import org.apache.lucene.index.SegmentInfo; import org.apache.lucene.index.SegmentInfo;
import org.apache.lucene.index.SegmentReadState; import org.apache.lucene.index.SegmentReadState;
import org.apache.lucene.index.SegmentWriteState; import org.apache.lucene.index.SegmentWriteState;
import org.apache.lucene.store.Directory;
/** /**
* Appending postings impl * Appending postings impl

View File

@ -63,6 +63,7 @@ final class VarSortedBytesImpl {
this.comp = comp; this.comp = comp;
size = 0; size = 0;
} }
@Override @Override
public void merge(MergeState mergeState, DocValues[] docValues) public void merge(MergeState mergeState, DocValues[] docValues)
throws IOException { throws IOException {

View File

@ -387,7 +387,7 @@ public class SimpleTextTermVectorsReader extends TermVectorsReader {
} }
@Override @Override
public Comparator<BytesRef> getComparator() throws IOException { public Comparator<BytesRef> getComparator() {
return BytesRef.getUTF8SortedAsUnicodeComparator(); return BytesRef.getUTF8SortedAsUnicodeComparator();
} }
} }

View File

@ -20,7 +20,6 @@ package org.apache.lucene.index;
import java.io.IOException; import java.io.IOException;
import org.apache.lucene.search.SearcherManager; // javadocs import org.apache.lucene.search.SearcherManager; // javadocs
import org.apache.lucene.store.*;
import org.apache.lucene.util.Bits; import org.apache.lucene.util.Bits;
import org.apache.lucene.util.BytesRef; import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.ReaderUtil; // for javadocs import org.apache.lucene.util.ReaderUtil; // for javadocs

View File

@ -22,25 +22,51 @@ import java.io.IOException;
import org.apache.lucene.util.BytesRef; import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.ReaderUtil; import org.apache.lucene.util.ReaderUtil;
abstract class BaseMultiReader<R extends IndexReader> extends CompositeReader { /** Base class for implementing {@link CompositeReader}s based on an array
* of sub-readers. The implementing class has to add code for
* correctly refcounting and closing the sub-readers.
*
* <p>User code will most likely use {@link MultiReader} to build a
* composite reader on a set of sub-readers (like several
* {@link DirectoryReader}s).
*
* <p> For efficiency, in this API documents are often referred to via
* <i>document numbers</i>, non-negative integers which each name a unique
* document in the index. These document numbers are ephemeral -- they may change
* as documents are added to and deleted from an index. Clients should thus not
* rely on a given document having the same number between sessions.
*
* <p><a name="thread-safety"></a><p><b>NOTE</b>: {@link
* IndexReader} instances are completely thread
* safe, meaning multiple threads can call any of its methods,
* concurrently. If your application requires external
* synchronization, you should <b>not</b> synchronize on the
* <code>IndexReader</code> instance; use your own
* (non-Lucene) objects instead.
* @see MultiReader
* @lucene.internal
*/
public abstract class BaseCompositeReader<R extends IndexReader> extends CompositeReader {
protected final R[] subReaders; protected final R[] subReaders;
protected final int[] starts; // 1st docno for each reader protected final int[] starts; // 1st docno for each reader
private final int maxDoc; private final int maxDoc;
private final int numDocs; private final int numDocs;
private final boolean hasDeletions; private final boolean hasDeletions;
protected BaseMultiReader(R[] subReaders) throws IOException { protected BaseCompositeReader(R[] subReaders) throws IOException {
this.subReaders = subReaders; this.subReaders = subReaders;
starts = new int[subReaders.length + 1]; // build starts array starts = new int[subReaders.length + 1]; // build starts array
int maxDoc = 0, numDocs = 0; int maxDoc = 0, numDocs = 0;
boolean hasDeletions = false; boolean hasDeletions = false;
for (int i = 0; i < subReaders.length; i++) { for (int i = 0; i < subReaders.length; i++) {
starts[i] = maxDoc; starts[i] = maxDoc;
maxDoc += subReaders[i].maxDoc(); // compute maxDocs final IndexReader r = subReaders[i];
numDocs += subReaders[i].numDocs(); // compute numDocs maxDoc += r.maxDoc(); // compute maxDocs
if (subReaders[i].hasDeletions()) { numDocs += r.numDocs(); // compute numDocs
if (r.hasDeletions()) {
hasDeletions = true; hasDeletions = true;
} }
r.registerParentReader(this);
} }
starts[subReaders.length] = maxDoc; starts[subReaders.length] = maxDoc;
this.maxDoc = maxDoc; this.maxDoc = maxDoc;
@ -51,8 +77,8 @@ abstract class BaseMultiReader<R extends IndexReader> extends CompositeReader {
@Override @Override
public final Fields getTermVectors(int docID) throws IOException { public final Fields getTermVectors(int docID) throws IOException {
ensureOpen(); ensureOpen();
final int i = readerIndex(docID); // find segment num final int i = readerIndex(docID); // find subreader num
return subReaders[i].getTermVectors(docID - starts[i]); // dispatch to segment return subReaders[i].getTermVectors(docID - starts[i]); // dispatch to subreader
} }
@Override @Override
@ -70,8 +96,8 @@ abstract class BaseMultiReader<R extends IndexReader> extends CompositeReader {
@Override @Override
public final void document(int docID, StoredFieldVisitor visitor) throws CorruptIndexException, IOException { public final void document(int docID, StoredFieldVisitor visitor) throws CorruptIndexException, IOException {
ensureOpen(); ensureOpen();
final int i = readerIndex(docID); // find segment num final int i = readerIndex(docID); // find subreader num
subReaders[i].document(docID - starts[i], visitor); // dispatch to segment reader subReaders[i].document(docID - starts[i], visitor); // dispatch to subreader
} }
@Override @Override
@ -83,7 +109,7 @@ abstract class BaseMultiReader<R extends IndexReader> extends CompositeReader {
@Override @Override
public final int docFreq(String field, BytesRef t) throws IOException { public final int docFreq(String field, BytesRef t) throws IOException {
ensureOpen(); ensureOpen();
int total = 0; // sum freqs in segments int total = 0; // sum freqs in subreaders
for (int i = 0; i < subReaders.length; i++) { for (int i = 0; i < subReaders.length; i++) {
total += subReaders[i].docFreq(field, t); total += subReaders[i].docFreq(field, t);
} }

View File

@ -401,7 +401,7 @@ class BufferedDeletesStream {
while (true) { while (true) {
final int docID = docsEnum.nextDoc(); final int docID = docsEnum.nextDoc();
//System.out.println(Thread.currentThread().getName() + " del term=" + term + " doc=" + docID); //System.out.println(Thread.currentThread().getName() + " del term=" + term + " doc=" + docID);
if (docID == DocsEnum.NO_MORE_DOCS) { if (docID == DocIdSetIterator.NO_MORE_DOCS) {
break; break;
} }
// NOTE: there is no limit check on the docID // NOTE: there is no limit check on the docID

View File

@ -576,7 +576,7 @@ public class CheckIndex {
segInfoStat.fieldNormStatus = testFieldNorms(fieldInfos, reader); segInfoStat.fieldNormStatus = testFieldNorms(fieldInfos, reader);
// Test the Term Index // Test the Term Index
segInfoStat.termIndexStatus = testPostings(reader); segInfoStat.termIndexStatus = testPostings(fieldInfos, reader);
// Test Stored Fields // Test Stored Fields
segInfoStat.storedFieldStatus = testStoredFields(info, reader, nf); segInfoStat.storedFieldStatus = testStoredFields(info, reader, nf);
@ -691,7 +691,7 @@ public class CheckIndex {
/** /**
* Test the term index. * Test the term index.
*/ */
private Status.TermIndexStatus testPostings(SegmentReader reader) { private Status.TermIndexStatus testPostings(FieldInfos fieldInfos, SegmentReader reader) {
// TODO: we should go and verify term vectors match, if // TODO: we should go and verify term vectors match, if
// crossCheckTermVectors is on... // crossCheckTermVectors is on...
@ -720,15 +720,31 @@ public class CheckIndex {
DocsEnum docsAndFreqs = null; DocsEnum docsAndFreqs = null;
DocsAndPositionsEnum postings = null; DocsAndPositionsEnum postings = null;
String lastField = null;
final FieldsEnum fieldsEnum = fields.iterator(); final FieldsEnum fieldsEnum = fields.iterator();
while(true) { while(true) {
final String field = fieldsEnum.next(); final String field = fieldsEnum.next();
if (field == null) { if (field == null) {
break; break;
} }
// MultiFieldsEnum relies upon this order...
if (lastField != null && field.compareTo(lastField) <= 0) {
throw new RuntimeException("fields out of order: lastField=" + lastField + " field=" + field);
}
lastField = field;
// check that the field is in fieldinfos, and is indexed.
// TODO: add a separate test to check this for different reader impls
FieldInfo fi = fieldInfos.fieldInfo(field);
if (fi == null) {
throw new RuntimeException("fieldsEnum inconsistent with fieldInfos, no fieldInfos for: " + field);
}
if (!fi.isIndexed) {
throw new RuntimeException("fieldsEnum inconsistent with fieldInfos, isIndexed == false for: " + field);
}
// TODO: really the codec should not return a field // TODO: really the codec should not return a field
// from FieldsEnum if it has to Terms... but we do // from FieldsEnum if it has no Terms... but we do
// this today: // this today:
// assert fields.terms(field) != null; // assert fields.terms(field) != null;
computedFieldCount++; computedFieldCount++;
@ -909,7 +925,7 @@ public class CheckIndex {
final int skipDocID = (int) (((idx+1)*(long) maxDoc)/8); final int skipDocID = (int) (((idx+1)*(long) maxDoc)/8);
postings = termsEnum.docsAndPositions(liveDocs, postings, false); postings = termsEnum.docsAndPositions(liveDocs, postings, false);
final int docID = postings.advance(skipDocID); final int docID = postings.advance(skipDocID);
if (docID == DocsEnum.NO_MORE_DOCS) { if (docID == DocIdSetIterator.NO_MORE_DOCS) {
break; break;
} else { } else {
if (docID < skipDocID) { if (docID < skipDocID) {
@ -932,7 +948,7 @@ public class CheckIndex {
} }
final int nextDocID = postings.nextDoc(); final int nextDocID = postings.nextDoc();
if (nextDocID == DocsEnum.NO_MORE_DOCS) { if (nextDocID == DocIdSetIterator.NO_MORE_DOCS) {
break; break;
} }
if (nextDocID <= docID) { if (nextDocID <= docID) {
@ -945,14 +961,14 @@ public class CheckIndex {
final int skipDocID = (int) (((idx+1)*(long) maxDoc)/8); final int skipDocID = (int) (((idx+1)*(long) maxDoc)/8);
docs = termsEnum.docs(liveDocs, docs, false); docs = termsEnum.docs(liveDocs, docs, false);
final int docID = docs.advance(skipDocID); final int docID = docs.advance(skipDocID);
if (docID == DocsEnum.NO_MORE_DOCS) { if (docID == DocIdSetIterator.NO_MORE_DOCS) {
break; break;
} else { } else {
if (docID < skipDocID) { if (docID < skipDocID) {
throw new RuntimeException("term " + term + ": advance(docID=" + skipDocID + ") returned docID=" + docID); throw new RuntimeException("term " + term + ": advance(docID=" + skipDocID + ") returned docID=" + docID);
} }
final int nextDocID = docs.nextDoc(); final int nextDocID = docs.nextDoc();
if (nextDocID == DocsEnum.NO_MORE_DOCS) { if (nextDocID == DocIdSetIterator.NO_MORE_DOCS) {
break; break;
} }
if (nextDocID <= docID) { if (nextDocID <= docID) {
@ -1051,7 +1067,7 @@ public class CheckIndex {
throw new RuntimeException("null DocsEnum from to existing term " + seekTerms[i]); throw new RuntimeException("null DocsEnum from to existing term " + seekTerms[i]);
} }
while(docs.nextDoc() != DocsEnum.NO_MORE_DOCS) { while(docs.nextDoc() != DocIdSetIterator.NO_MORE_DOCS) {
totDocCount++; totDocCount++;
} }
} }

View File

@ -488,19 +488,6 @@ public class ConcurrentMergeScheduler extends MergeScheduler {
} }
} }
} }
@Override
public String toString() {
MergePolicy.OneMerge merge = getRunningMerge();
if (merge == null) {
merge = startMerge;
}
try {
return "merge thread: " + tWriter.segString(merge.segments);
} catch (IOException ioe) {
throw new RuntimeException(ioe);
}
}
} }
/** Called when an exception is hit in a background merge /** Called when an exception is hit in a background merge

View File

@ -48,13 +48,8 @@ import org.apache.lucene.store.Directory;
synchronization, you should <b>not</b> synchronize on the synchronization, you should <b>not</b> synchronize on the
<code>IndexReader</code> instance; use your own <code>IndexReader</code> instance; use your own
(non-Lucene) objects instead. (non-Lucene) objects instead.
<p><em>Please note:</em> This class extends from an internal (invisible)
superclass that is generic: The type parameter {@code R} is
{@link AtomicReader}, see {@link #subReaders} and
{@link #getSequentialSubReaders}.
*/ */
public abstract class DirectoryReader extends BaseMultiReader<AtomicReader> { public abstract class DirectoryReader extends BaseCompositeReader<AtomicReader> {
public static final int DEFAULT_TERMS_INDEX_DIVISOR = 1; public static final int DEFAULT_TERMS_INDEX_DIVISOR = 1;
protected final Directory directory; protected final Directory directory;

View File

@ -337,6 +337,9 @@ final class DocFieldProcessor extends DocConsumer {
if (perDocConsumer == null) { if (perDocConsumer == null) {
PerDocWriteState perDocWriteState = docState.docWriter.newPerDocWriteState(""); PerDocWriteState perDocWriteState = docState.docWriter.newPerDocWriteState("");
perDocConsumer = docState.docWriter.codec.docValuesFormat().docsConsumer(perDocWriteState); perDocConsumer = docState.docWriter.codec.docValuesFormat().docsConsumer(perDocWriteState);
if (perDocConsumer == null) {
throw new IllegalStateException("codec=" + docState.docWriter.codec + " does not support docValues: from docValuesFormat().docsConsumer(...) returned null; field=" + fieldInfo.name);
}
} }
DocValuesConsumer docValuesConsumer = perDocConsumer.addValuesField(valueType, fieldInfo); DocValuesConsumer docValuesConsumer = perDocConsumer.addValuesField(valueType, fieldInfo);
fieldInfo.setDocValuesType(valueType, false); fieldInfo.setDocValuesType(valueType, false);

View File

@ -642,19 +642,17 @@ public class DocTermOrds {
* ord; in this case we "wrap" our own terms index * ord; in this case we "wrap" our own terms index
* around it. */ * around it. */
private final class OrdWrappedTermsEnum extends TermsEnum { private final class OrdWrappedTermsEnum extends TermsEnum {
private final AtomicReader reader;
private final TermsEnum termsEnum; private final TermsEnum termsEnum;
private BytesRef term; private BytesRef term;
private long ord = -indexInterval-1; // force "real" seek private long ord = -indexInterval-1; // force "real" seek
public OrdWrappedTermsEnum(AtomicReader reader) throws IOException { public OrdWrappedTermsEnum(AtomicReader reader) throws IOException {
this.reader = reader;
assert indexedTermsArray != null; assert indexedTermsArray != null;
termsEnum = reader.fields().terms(field).iterator(null); termsEnum = reader.fields().terms(field).iterator(null);
} }
@Override @Override
public Comparator<BytesRef> getComparator() throws IOException { public Comparator<BytesRef> getComparator() {
return termsEnum.getComparator(); return termsEnum.getComparator();
} }

View File

@ -148,6 +148,7 @@ public abstract class DocValues implements Closeable {
protected Source(Type type) { protected Source(Type type) {
this.type = type; this.type = type;
} }
/** /**
* Returns a <tt>long</tt> for the given document id or throws an * Returns a <tt>long</tt> for the given document id or throws an
* {@link UnsupportedOperationException} if this source doesn't support * {@link UnsupportedOperationException} if this source doesn't support
@ -239,9 +240,10 @@ public abstract class DocValues implements Closeable {
public BytesRef getBytes(int docID, BytesRef bytesRef) { public BytesRef getBytes(int docID, BytesRef bytesRef) {
final int ord = ord(docID); final int ord = ord(docID);
if (ord < 0) { if (ord < 0) {
// Negative ord means doc was missing?
bytesRef.length = 0; bytesRef.length = 0;
} else { } else {
getByOrd(ord , bytesRef); getByOrd(ord, bytesRef);
} }
return bytesRef; return bytesRef;
} }
@ -253,7 +255,7 @@ public abstract class DocValues implements Closeable {
public abstract int ord(int docID); public abstract int ord(int docID);
/** Returns value for specified ord. */ /** Returns value for specified ord. */
public abstract BytesRef getByOrd(int ord, BytesRef bytesRef); public abstract BytesRef getByOrd(int ord, BytesRef result);
/** Return true if it's safe to call {@link /** Return true if it's safe to call {@link
* #getDocToOrd}. */ * #getDocToOrd}. */
@ -274,7 +276,7 @@ public abstract class DocValues implements Closeable {
} }
/** /**
* Performs a lookup by value. * Lookup ord by value.
* *
* @param value * @param value
* the value to look up * the value to look up
@ -283,11 +285,11 @@ public abstract class DocValues implements Closeable {
* values to the given value. Must not be <code>null</code> * values to the given value. Must not be <code>null</code>
* @return the given values ordinal if found or otherwise * @return the given values ordinal if found or otherwise
* <code>(-(ord)-1)</code>, defined as the ordinal of the first * <code>(-(ord)-1)</code>, defined as the ordinal of the first
* element that is greater than the given value. This guarantees * element that is greater than the given value (the insertion
* that the return value will always be &gt;= 0 if the given value * point). This guarantees that the return value will always be
* is found. * &gt;= 0 if the given value is found.
*/ */
public int getByValue(BytesRef value, BytesRef spare) { public int getOrdByValue(BytesRef value, BytesRef spare) {
return binarySearch(value, spare, 0, getValueCount() - 1); return binarySearch(value, spare, 0, getValueCount() - 1);
} }
@ -405,7 +407,7 @@ public abstract class DocValues implements Closeable {
} }
@Override @Override
public int getByValue(BytesRef value, BytesRef spare) { public int getOrdByValue(BytesRef value, BytesRef spare) {
if (value.length == 0) { if (value.length == 0) {
return 0; return 0;
} else { } else {
@ -414,7 +416,7 @@ public abstract class DocValues implements Closeable {
} }
@Override @Override
public int getValueCount() { public int getValueCount() {
return 1; return 1;
} }
}; };

View File

@ -17,8 +17,10 @@ package org.apache.lucene.index;
* limitations under the License. * limitations under the License.
*/ */
import org.apache.lucene.util.AttributeSource;
import org.apache.lucene.util.Bits; import org.apache.lucene.util.Bits;
import org.apache.lucene.util.BytesRef; import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.automaton.CompiledAutomaton;
import java.io.IOException; import java.io.IOException;
import java.util.Comparator; import java.util.Comparator;
@ -26,7 +28,7 @@ import java.util.Comparator;
/** A <code>FilterAtomicReader</code> contains another AtomicReader, which it /** A <code>FilterAtomicReader</code> contains another AtomicReader, which it
* uses as its basic source of data, possibly transforming the data along the * uses as its basic source of data, possibly transforming the data along the
* way or providing additional functionality. The class * way or providing additional functionality. The class
* <code>FilterIndexReader</code> itself simply implements all abstract methods * <code>FilterAtomicReader</code> itself simply implements all abstract methods
* of <code>IndexReader</code> with versions that pass all requests to the * of <code>IndexReader</code> with versions that pass all requests to the
* contained index reader. Subclasses of <code>FilterAtomicReader</code> may * contained index reader. Subclasses of <code>FilterAtomicReader</code> may
* further override some of these methods and may also provide additional * further override some of these methods and may also provide additional
@ -37,7 +39,7 @@ public class FilterAtomicReader extends AtomicReader {
/** Base class for filtering {@link Fields} /** Base class for filtering {@link Fields}
* implementations. */ * implementations. */
public static class FilterFields extends Fields { public static class FilterFields extends Fields {
protected Fields in; protected final Fields in;
public FilterFields(Fields in) { public FilterFields(Fields in) {
this.in = in; this.in = in;
@ -57,12 +59,17 @@ public class FilterAtomicReader extends AtomicReader {
public int getUniqueFieldCount() throws IOException { public int getUniqueFieldCount() throws IOException {
return in.getUniqueFieldCount(); return in.getUniqueFieldCount();
} }
@Override
public long getUniqueTermCount() throws IOException {
return in.getUniqueTermCount();
}
} }
/** Base class for filtering {@link Terms} /** Base class for filtering {@link Terms}
* implementations. */ * implementations. */
public static class FilterTerms extends Terms { public static class FilterTerms extends Terms {
protected Terms in; protected final Terms in;
public FilterTerms(Terms in) { public FilterTerms(Terms in) {
this.in = in; this.in = in;
@ -97,11 +104,16 @@ public class FilterAtomicReader extends AtomicReader {
public int getDocCount() throws IOException { public int getDocCount() throws IOException {
return in.getDocCount(); return in.getDocCount();
} }
@Override
public TermsEnum intersect(CompiledAutomaton automaton, BytesRef bytes) throws java.io.IOException {
return in.intersect(automaton, bytes);
}
} }
/** Base class for filtering {@link TermsEnum} implementations. */ /** Base class for filtering {@link TermsEnum} implementations. */
public static class FilterFieldsEnum extends FieldsEnum { public static class FilterFieldsEnum extends FieldsEnum {
protected FieldsEnum in; protected final FieldsEnum in;
public FilterFieldsEnum(FieldsEnum in) { public FilterFieldsEnum(FieldsEnum in) {
this.in = in; this.in = in;
} }
@ -115,11 +127,16 @@ public class FilterAtomicReader extends AtomicReader {
public Terms terms() throws IOException { public Terms terms() throws IOException {
return in.terms(); return in.terms();
} }
@Override
public AttributeSource attributes() {
return in.attributes();
}
} }
/** Base class for filtering {@link TermsEnum} implementations. */ /** Base class for filtering {@link TermsEnum} implementations. */
public static class FilterTermsEnum extends TermsEnum { public static class FilterTermsEnum extends TermsEnum {
protected TermsEnum in; protected final TermsEnum in;
public FilterTermsEnum(TermsEnum in) { this.in = in; } public FilterTermsEnum(TermsEnum in) { this.in = in; }
@ -174,7 +191,7 @@ public class FilterAtomicReader extends AtomicReader {
} }
@Override @Override
public Comparator<BytesRef> getComparator() throws IOException { public Comparator<BytesRef> getComparator() {
return in.getComparator(); return in.getComparator();
} }
@ -187,11 +204,16 @@ public class FilterAtomicReader extends AtomicReader {
public TermState termState() throws IOException { public TermState termState() throws IOException {
return in.termState(); return in.termState();
} }
@Override
public AttributeSource attributes() {
return in.attributes();
}
} }
/** Base class for filtering {@link DocsEnum} implementations. */ /** Base class for filtering {@link DocsEnum} implementations. */
public static class FilterDocsEnum extends DocsEnum { public static class FilterDocsEnum extends DocsEnum {
protected DocsEnum in; protected final DocsEnum in;
public FilterDocsEnum(DocsEnum in) { public FilterDocsEnum(DocsEnum in) {
this.in = in; this.in = in;
@ -216,11 +238,16 @@ public class FilterAtomicReader extends AtomicReader {
public int advance(int target) throws IOException { public int advance(int target) throws IOException {
return in.advance(target); return in.advance(target);
} }
@Override
public AttributeSource attributes() {
return in.attributes();
}
} }
/** Base class for filtering {@link DocsAndPositionsEnum} implementations. */ /** Base class for filtering {@link DocsAndPositionsEnum} implementations. */
public static class FilterDocsAndPositionsEnum extends DocsAndPositionsEnum { public static class FilterDocsAndPositionsEnum extends DocsAndPositionsEnum {
protected DocsAndPositionsEnum in; protected final DocsAndPositionsEnum in;
public FilterDocsAndPositionsEnum(DocsAndPositionsEnum in) { public FilterDocsAndPositionsEnum(DocsAndPositionsEnum in) {
this.in = in; this.in = in;
@ -270,18 +297,24 @@ public class FilterAtomicReader extends AtomicReader {
public boolean hasPayload() { public boolean hasPayload() {
return in.hasPayload(); return in.hasPayload();
} }
@Override
public AttributeSource attributes() {
return in.attributes();
}
} }
protected AtomicReader in; protected final AtomicReader in;
/** /**
* <p>Construct a FilterIndexReader based on the specified base reader. * <p>Construct a FilterAtomicReader based on the specified base reader.
* <p>Note that base reader is closed if this FilterIndexReader is closed.</p> * <p>Note that base reader is closed if this FilterAtomicReader is closed.</p>
* @param in specified base reader. * @param in specified base reader.
*/ */
public FilterAtomicReader(AtomicReader in) { public FilterAtomicReader(AtomicReader in) {
super(); super();
this.in = in; this.in = in;
in.registerParentReader(this);
} }
@Override @Override
@ -363,7 +396,7 @@ public class FilterAtomicReader extends AtomicReader {
@Override @Override
public String toString() { public String toString() {
final StringBuilder buffer = new StringBuilder("FilterIndexReader("); final StringBuilder buffer = new StringBuilder("FilterAtomicReader(");
buffer.append(in); buffer.append(in);
buffer.append(')'); buffer.append(')');
return buffer.toString(); return buffer.toString();

View File

@ -122,7 +122,7 @@ public abstract class FilteredTermsEnum extends TermsEnum {
} }
@Override @Override
public Comparator<BytesRef> getComparator() throws IOException { public Comparator<BytesRef> getComparator() {
return tenum.getComparator(); return tenum.getComparator();
} }

View File

@ -19,7 +19,6 @@ package org.apache.lucene.index;
import java.io.File; import java.io.File;
import java.io.FilenameFilter; import java.io.FilenameFilter;
import java.util.HashSet;
import java.util.regex.Pattern; import java.util.regex.Pattern;
/** /**

View File

@ -21,6 +21,7 @@ import java.io.Closeable;
import java.io.IOException; import java.io.IOException;
import java.util.Collections; import java.util.Collections;
import java.util.LinkedHashSet; import java.util.LinkedHashSet;
import java.util.WeakHashMap;
import java.util.Set; import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
@ -72,10 +73,13 @@ import org.apache.lucene.util.ReaderUtil; // for javadocs
*/ */
public abstract class IndexReader implements Closeable { public abstract class IndexReader implements Closeable {
private boolean closed = false;
private boolean closedByChild = false;
private final AtomicInteger refCount = new AtomicInteger(1);
IndexReader() { IndexReader() {
if (!(this instanceof CompositeReader || this instanceof AtomicReader)) if (!(this instanceof CompositeReader || this instanceof AtomicReader))
throw new Error("This class should never be directly extended, subclass AtomicReader or CompositeReader instead!"); throw new Error("IndexReader should never be directly extended, subclass AtomicReader or CompositeReader instead.");
refCount.set(1);
} }
/** /**
@ -91,6 +95,9 @@ public abstract class IndexReader implements Closeable {
private final Set<ReaderClosedListener> readerClosedListeners = private final Set<ReaderClosedListener> readerClosedListeners =
Collections.synchronizedSet(new LinkedHashSet<ReaderClosedListener>()); Collections.synchronizedSet(new LinkedHashSet<ReaderClosedListener>());
private final Set<IndexReader> parentReaders =
Collections.synchronizedSet(Collections.newSetFromMap(new WeakHashMap<IndexReader,Boolean>()));
/** Expert: adds a {@link ReaderClosedListener}. The /** Expert: adds a {@link ReaderClosedListener}. The
* provided listener will be invoked when this reader is closed. * provided listener will be invoked when this reader is closed.
* *
@ -107,8 +114,19 @@ public abstract class IndexReader implements Closeable {
ensureOpen(); ensureOpen();
readerClosedListeners.remove(listener); readerClosedListeners.remove(listener);
} }
/** Expert: This method is called by {@code IndexReader}s which wrap other readers
* (e.g. {@link CompositeReader} or {@link FilterAtomicReader}) to register the parent
* at the child (this reader) on construction of the parent. When this reader is closed,
* it will mark all registered parents as closed, too. The references to parent readers
* are weak only, so they can be GCed once they are no longer in use.
* @lucene.experimental */
public final void registerParentReader(IndexReader reader) {
ensureOpen();
parentReaders.add(reader);
}
private final void notifyReaderClosedListeners() { private void notifyReaderClosedListeners() {
synchronized(readerClosedListeners) { synchronized(readerClosedListeners) {
for(ReaderClosedListener listener : readerClosedListeners) { for(ReaderClosedListener listener : readerClosedListeners) {
listener.onClose(this); listener.onClose(this);
@ -116,9 +134,17 @@ public abstract class IndexReader implements Closeable {
} }
} }
private boolean closed = false; private void reportCloseToParentReaders() {
synchronized(parentReaders) {
private final AtomicInteger refCount = new AtomicInteger(); for(IndexReader parent : parentReaders) {
parent.closedByChild = true;
// cross memory barrier by a fake write:
parent.refCount.addAndGet(0);
// recurse:
parent.reportCloseToParentReaders();
}
}
}
/** Expert: returns the current refCount for this reader */ /** Expert: returns the current refCount for this reader */
public final int getRefCount() { public final int getRefCount() {
@ -191,7 +217,12 @@ public abstract class IndexReader implements Closeable {
* @see #incRef * @see #incRef
*/ */
public final void decRef() throws IOException { public final void decRef() throws IOException {
ensureOpen(); // only check refcount here (don't call ensureOpen()), so we can
// still close the reader if it was made invalid by a child:
if (refCount.get() <= 0) {
throw new AlreadyClosedException("this IndexReader is closed");
}
final int rc = refCount.decrementAndGet(); final int rc = refCount.decrementAndGet();
if (rc == 0) { if (rc == 0) {
boolean success = false; boolean success = false;
@ -204,6 +235,7 @@ public abstract class IndexReader implements Closeable {
refCount.incrementAndGet(); refCount.incrementAndGet();
} }
} }
reportCloseToParentReaders();
notifyReaderClosedListeners(); notifyReaderClosedListeners();
} else if (rc < 0) { } else if (rc < 0) {
throw new IllegalStateException("too many decRef calls: refCount is " + rc + " after decrement"); throw new IllegalStateException("too many decRef calls: refCount is " + rc + " after decrement");
@ -217,6 +249,33 @@ public abstract class IndexReader implements Closeable {
if (refCount.get() <= 0) { if (refCount.get() <= 0) {
throw new AlreadyClosedException("this IndexReader is closed"); throw new AlreadyClosedException("this IndexReader is closed");
} }
// the happens before rule on reading the refCount, which must be after the fake write,
// ensures that we see the value:
if (closedByChild) {
throw new AlreadyClosedException("this IndexReader cannot be used anymore as one of its child readers was closed");
}
}
/** {@inheritDoc}
* <p>For caching purposes, {@code IndexReader} subclasses are not allowed
* to implement equals/hashCode, so methods are declared final.
* To lookup instances from caches use {@link #getCoreCacheKey} and
* {@link #getCombinedCoreAndDeletesKey}.
*/
@Override
public final boolean equals(Object obj) {
return (this == obj);
}
/** {@inheritDoc}
* <p>For caching purposes, {@code IndexReader} subclasses are not allowed
* to implement equals/hashCode, so methods are declared final.
* To lookup instances from caches use {@link #getCoreCacheKey} and
* {@link #getCombinedCoreAndDeletesKey}.
*/
@Override
public final int hashCode() {
return System.identityHashCode(this);
} }
/** Returns a IndexReader reading the index in the given /** Returns a IndexReader reading the index in the given

View File

@ -532,7 +532,7 @@ public class IndexWriter implements Closeable, TwoPhaseCommit {
public synchronized boolean delete(int docID) { public synchronized boolean delete(int docID) {
assert liveDocs != null; assert liveDocs != null;
assert docID >= 0 && docID < liveDocs.length(); assert docID >= 0 && docID < liveDocs.length() : "out of bounds: docid=" + docID + ",liveDocsLength=" + liveDocs.length();
assert !shared; assert !shared;
final boolean didDelete = liveDocs.get(docID); final boolean didDelete = liveDocs.get(docID);
if (didDelete) { if (didDelete) {
@ -577,6 +577,7 @@ public class IndexWriter implements Closeable, TwoPhaseCommit {
public synchronized void initWritableLiveDocs() throws IOException { public synchronized void initWritableLiveDocs() throws IOException {
assert Thread.holdsLock(IndexWriter.this); assert Thread.holdsLock(IndexWriter.this);
assert info.docCount > 0;
//System.out.println("initWritableLivedocs seg=" + info + " liveDocs=" + liveDocs + " shared=" + shared); //System.out.println("initWritableLivedocs seg=" + info + " liveDocs=" + liveDocs + " shared=" + shared);
if (shared) { if (shared) {
// Copy on write: this means we've cloned a // Copy on write: this means we've cloned a
@ -3133,7 +3134,7 @@ public class IndexWriter implements Closeable, TwoPhaseCommit {
return false; return false;
} }
final ReadersAndLiveDocs mergedDeletes = commitMergedDeletes(merge); final ReadersAndLiveDocs mergedDeletes = merge.info.docCount == 0 ? null : commitMergedDeletes(merge);
assert mergedDeletes == null || mergedDeletes.pendingDeleteCount != 0; assert mergedDeletes == null || mergedDeletes.pendingDeleteCount != 0;

View File

@ -35,7 +35,7 @@ import org.apache.lucene.util.ReaderUtil;
* Exposes flex API, merged from flex API of sub-segments. * Exposes flex API, merged from flex API of sub-segments.
* This is useful when you're interacting with an {@link * This is useful when you're interacting with an {@link
* IndexReader} implementation that consists of sequential * IndexReader} implementation that consists of sequential
* sub-readers (eg DirectoryReader or {@link * sub-readers (eg {@link DirectoryReader} or {@link
* MultiReader}). * MultiReader}).
* *
* <p><b>NOTE</b>: for multi readers, you'll get better * <p><b>NOTE</b>: for multi readers, you'll get better

View File

@ -19,15 +19,25 @@ package org.apache.lucene.index;
import java.io.IOException; import java.io.IOException;
/** An IndexReader which reads multiple indexes, appending /** A {@link CompositeReader} which reads multiple indexes, appending
* their content. * their content. It can be used to create a view on several
* sub-readers (like {@link DirectoryReader}) and execute searches on it.
<p><em>Please note:</em> This class extends from an internal (invisible) *
superclass that is generic: The type parameter {@code R} is * <p> For efficiency, in this API documents are often referred to via
{@link IndexReader}, see {@link #subReaders} and * <i>document numbers</i>, non-negative integers which each name a unique
{@link #getSequentialSubReaders}. * document in the index. These document numbers are ephemeral -- they may change
* as documents are added to and deleted from an index. Clients should thus not
* rely on a given document having the same number between sessions.
*
* <p><a name="thread-safety"></a><p><b>NOTE</b>: {@link
* IndexReader} instances are completely thread
* safe, meaning multiple threads can call any of its methods,
* concurrently. If your application requires external
* synchronization, you should <b>not</b> synchronize on the
* <code>IndexReader</code> instance; use your own
* (non-Lucene) objects instead.
*/ */
public class MultiReader extends BaseMultiReader<IndexReader> { public class MultiReader extends BaseCompositeReader<IndexReader> {
private final boolean closeSubReaders; private final boolean closeSubReaders;
/** /**

View File

@ -18,11 +18,8 @@ package org.apache.lucene.index;
import java.io.IOException; import java.io.IOException;
import org.apache.lucene.codecs.DocValuesConsumer; import org.apache.lucene.codecs.DocValuesConsumer;
import org.apache.lucene.document.DocValuesField;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.DocValues.Type; import org.apache.lucene.index.DocValues.Type;
import org.apache.lucene.search.similarities.Similarity; import org.apache.lucene.search.similarities.Similarity;
import org.apache.lucene.util.BytesRef;
public class NormsConsumerPerField extends InvertedDocEndConsumerPerField implements Comparable<NormsConsumerPerField> { public class NormsConsumerPerField extends InvertedDocEndConsumerPerField implements Comparable<NormsConsumerPerField> {
private final FieldInfo fieldInfo; private final FieldInfo fieldInfo;

View File

@ -19,7 +19,6 @@ package org.apache.lucene.index;
import java.io.IOException; import java.io.IOException;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap;
import java.util.IdentityHashMap; import java.util.IdentityHashMap;
import java.util.Iterator; import java.util.Iterator;
import java.util.Map; import java.util.Map;
@ -57,7 +56,8 @@ public final class ParallelAtomicReader extends AtomicReader {
private final boolean closeSubReaders; private final boolean closeSubReaders;
private final int maxDoc, numDocs; private final int maxDoc, numDocs;
private final boolean hasDeletions; private final boolean hasDeletions;
final SortedMap<String,AtomicReader> fieldToReader = new TreeMap<String,AtomicReader>(); private final SortedMap<String,AtomicReader> fieldToReader = new TreeMap<String,AtomicReader>();
private final SortedMap<String,AtomicReader> tvFieldToReader = new TreeMap<String,AtomicReader>();
/** Create a ParallelAtomicReader based on the provided /** Create a ParallelAtomicReader based on the provided
* readers; auto-closes the given readers on {@link #close()}. */ * readers; auto-closes the given readers on {@link #close()}. */
@ -98,24 +98,43 @@ public final class ParallelAtomicReader extends AtomicReader {
throw new IllegalArgumentException("All readers must have same maxDoc: "+maxDoc+"!="+reader.maxDoc()); throw new IllegalArgumentException("All readers must have same maxDoc: "+maxDoc+"!="+reader.maxDoc());
} }
} }
// build FieldInfos and fieldToReader map:
for (final AtomicReader reader : this.parallelReaders) { for (final AtomicReader reader : this.parallelReaders) {
final FieldInfos readerFieldInfos = reader.getFieldInfos(); final FieldInfos readerFieldInfos = reader.getFieldInfos();
for(FieldInfo fieldInfo : readerFieldInfos) { // update fieldToReader map for (FieldInfo fieldInfo : readerFieldInfos) {
// NOTE: first reader having a given field "wins": // NOTE: first reader having a given field "wins":
if (!fieldToReader.containsKey(fieldInfo.name)) { if (!fieldToReader.containsKey(fieldInfo.name)) {
fieldInfos.add(fieldInfo); fieldInfos.add(fieldInfo);
fieldToReader.put(fieldInfo.name, reader); fieldToReader.put(fieldInfo.name, reader);
this.fields.addField(fieldInfo.name, reader.terms(fieldInfo.name)); if (fieldInfo.storeTermVector) {
tvFieldToReader.put(fieldInfo.name, reader);
}
} }
} }
} }
// build Fields instance
for (final AtomicReader reader : this.parallelReaders) {
final Fields readerFields = reader.fields();
if (readerFields != null) {
final FieldsEnum it = readerFields.iterator();
String name;
while ((name = it.next()) != null) {
// only add if the reader responsible for that field name is the current:
if (fieldToReader.get(name) == reader) {
this.fields.addField(name, it.terms());
}
}
}
}
// do this finally so any Exceptions occurred before don't affect refcounts: // do this finally so any Exceptions occurred before don't affect refcounts:
if (!closeSubReaders) { for (AtomicReader reader : completeReaderSet) {
for (AtomicReader reader : completeReaderSet) { if (!closeSubReaders) {
reader.incRef(); reader.incRef();
} }
reader.registerParentReader(this);
} }
} }
@ -132,11 +151,11 @@ public final class ParallelAtomicReader extends AtomicReader {
private final class ParallelFieldsEnum extends FieldsEnum { private final class ParallelFieldsEnum extends FieldsEnum {
private String currentField; private String currentField;
private final Iterator<String> keys; private final Iterator<String> keys;
private final Fields fields; private final ParallelFields fields;
ParallelFieldsEnum(Fields fields) { ParallelFieldsEnum(ParallelFields fields) {
this.fields = fields; this.fields = fields;
keys = fieldToReader.keySet().iterator(); keys = fields.fields.keySet().iterator();
} }
@Override @Override
@ -158,7 +177,7 @@ public final class ParallelAtomicReader extends AtomicReader {
// Single instance of this, per ParallelReader instance // Single instance of this, per ParallelReader instance
private final class ParallelFields extends Fields { private final class ParallelFields extends Fields {
final HashMap<String,Terms> fields = new HashMap<String,Terms>(); final Map<String,Terms> fields = new TreeMap<String,Terms>();
ParallelFields() { ParallelFields() {
} }
@ -197,11 +216,6 @@ public final class ParallelAtomicReader extends AtomicReader {
@Override @Override
public Fields fields() { public Fields fields() {
ensureOpen(); ensureOpen();
// we cache the inner field instances, so we must check
// that the delegate readers are really still open:
for (final AtomicReader reader : parallelReaders) {
reader.ensureOpen();
}
return fields; return fields;
} }
@ -231,15 +245,17 @@ public final class ParallelAtomicReader extends AtomicReader {
} }
} }
// get all vectors
@Override @Override
public Fields getTermVectors(int docID) throws IOException { public Fields getTermVectors(int docID) throws IOException {
ensureOpen(); ensureOpen();
ParallelFields fields = new ParallelFields(); ParallelFields fields = null;
for (Map.Entry<String,AtomicReader> ent : fieldToReader.entrySet()) { for (Map.Entry<String,AtomicReader> ent : tvFieldToReader.entrySet()) {
String fieldName = ent.getKey(); String fieldName = ent.getKey();
Terms vector = ent.getValue().getTermVector(docID, fieldName); Terms vector = ent.getValue().getTermVector(docID, fieldName);
if (vector != null) { if (vector != null) {
if (fields == null) {
fields = new ParallelFields();
}
fields.addField(fieldName, vector); fields.addField(fieldName, vector);
} }
} }

View File

@ -46,7 +46,7 @@ import java.util.Set;
* by number of documents per segment. If you use different {@link MergePolicy}s * by number of documents per segment. If you use different {@link MergePolicy}s
* it might happen that the segment structure of your index is no longer predictable. * it might happen that the segment structure of your index is no longer predictable.
*/ */
public final class ParallelCompositeReader extends BaseMultiReader<IndexReader> { public final class ParallelCompositeReader extends BaseCompositeReader<IndexReader> {
private final boolean closeSubReaders; private final boolean closeSubReaders;
private final Set<CompositeReader> completeReaderSet = private final Set<CompositeReader> completeReaderSet =
Collections.newSetFromMap(new IdentityHashMap<CompositeReader,Boolean>()); Collections.newSetFromMap(new IdentityHashMap<CompositeReader,Boolean>());

View File

@ -1,22 +1,4 @@
package org.apache.lucene.index; package org.apache.lucene.index;
/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import java.io.PrintStream;
import org.apache.lucene.codecs.PerDocConsumer; import org.apache.lucene.codecs.PerDocConsumer;
import org.apache.lucene.store.Directory; import org.apache.lucene.store.Directory;
import org.apache.lucene.store.IOContext; import org.apache.lucene.store.IOContext;

View File

@ -68,6 +68,7 @@ public final class SlowCompositeReaderWrapper extends AtomicReader {
in = reader; in = reader;
fields = MultiFields.getFields(in); fields = MultiFields.getFields(in);
liveDocs = MultiFields.getLiveDocs(in); liveDocs = MultiFields.getLiveDocs(in);
in.registerParentReader(this);
} }
@Override @Override
@ -78,7 +79,6 @@ public final class SlowCompositeReaderWrapper extends AtomicReader {
@Override @Override
public Fields fields() throws IOException { public Fields fields() throws IOException {
ensureOpen(); ensureOpen();
in.ensureOpen(); // as we cached the fields, we better check the original reader
return fields; return fields;
} }
@ -127,7 +127,6 @@ public final class SlowCompositeReaderWrapper extends AtomicReader {
@Override @Override
public Bits getLiveDocs() { public Bits getLiveDocs() {
ensureOpen(); ensureOpen();
in.ensureOpen(); // as we cached the liveDocs, we better check the original reader
return liveDocs; return liveDocs;
} }

View File

@ -81,7 +81,7 @@ public final class SortedBytesMergeUtils {
} }
} }
public static List<SortedSourceSlice> buildSlices(int[] docBases ,int[][] docMaps, public static List<SortedSourceSlice> buildSlices(int[] docBases, int[][] docMaps,
DocValues[] docValues, MergeContext ctx) throws IOException { DocValues[] docValues, MergeContext ctx) throws IOException {
final List<SortedSourceSlice> slices = new ArrayList<SortedSourceSlice>(); final List<SortedSourceSlice> slices = new ArrayList<SortedSourceSlice>();
for (int i = 0; i < docValues.length; i++) { for (int i = 0; i < docValues.length; i++) {
@ -111,7 +111,7 @@ public final class SortedBytesMergeUtils {
* mapping in docIDToRelativeOrd. After the merge SortedSourceSlice#ordMapping * mapping in docIDToRelativeOrd. After the merge SortedSourceSlice#ordMapping
* contains the new global ordinals for the relative index. * contains the new global ordinals for the relative index.
*/ */
private static void createOrdMapping(int[] docBases ,int[][] docMaps, private static void createOrdMapping(int[] docBases, int[][] docMaps,
SortedSourceSlice currentSlice) { SortedSourceSlice currentSlice) {
final int readerIdx = currentSlice.readerIdx; final int readerIdx = currentSlice.readerIdx;
final int[] currentDocMap = docMaps[readerIdx]; final int[] currentDocMap = docMaps[readerIdx];

View File

@ -23,6 +23,7 @@ import java.util.Comparator;
import org.apache.lucene.util.AttributeSource; import org.apache.lucene.util.AttributeSource;
import org.apache.lucene.util.Bits; import org.apache.lucene.util.Bits;
import org.apache.lucene.util.BytesRef; import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.BytesRefIterator;
/** Iterator to seek ({@link #seekCeil(BytesRef)}, {@link /** Iterator to seek ({@link #seekCeil(BytesRef)}, {@link
* #seekExact(BytesRef,boolean)}) or step through ({@link * #seekExact(BytesRef,boolean)}) or step through ({@link
@ -40,7 +41,7 @@ import org.apache.lucene.util.BytesRef;
* of the <code>seek</code> methods. * of the <code>seek</code> methods.
* *
* @lucene.experimental */ * @lucene.experimental */
public abstract class TermsEnum { public abstract class TermsEnum implements BytesRefIterator {
private AttributeSource atts = null; private AttributeSource atts = null;
@ -114,14 +115,6 @@ public abstract class TermsEnum {
} }
} }
/** Increments the enumeration to the next term.
* Returns the resulting term, or null if the end was
* hit (which means the enum is unpositioned). The
* returned BytesRef may be re-used across calls to next.
* After this method returns null, do not call it again:
* the results are undefined. */
public abstract BytesRef next() throws IOException;
/** Returns current term. Do not call this when the enum /** Returns current term. Do not call this when the enum
* is unpositioned. */ * is unpositioned. */
public abstract BytesRef term() throws IOException; public abstract BytesRef term() throws IOException;
@ -186,13 +179,6 @@ public abstract class TermsEnum {
} }
}; };
} }
/** Return the {@link BytesRef} Comparator used to sort
* terms provided by the iterator. This may return
* null if there are no terms. Callers may invoke this
* method many times, so it's best to cache a single
* instance & reuse it. */
public abstract Comparator<BytesRef> getComparator() throws IOException;
/** An empty TermsEnum for quickly returning an empty instance e.g. /** An empty TermsEnum for quickly returning an empty instance e.g.
* in {@link org.apache.lucene.search.MultiTermQuery} * in {@link org.apache.lucene.search.MultiTermQuery}

View File

@ -203,8 +203,6 @@ final class BooleanScorer extends Scorer {
private final int minNrShouldMatch; private final int minNrShouldMatch;
private int end; private int end;
private Bucket current; private Bucket current;
private int doc = -1;
// Any time a prohibited clause matches we set bit 0: // Any time a prohibited clause matches we set bit 0:
private static final int PROHIBITED_MASK = 1; private static final int PROHIBITED_MASK = 1;

View File

@ -25,7 +25,6 @@ import java.util.List;
import org.apache.lucene.search.BooleanClause.Occur; import org.apache.lucene.search.BooleanClause.Occur;
import org.apache.lucene.search.BooleanQuery.BooleanWeight; import org.apache.lucene.search.BooleanQuery.BooleanWeight;
import org.apache.lucene.search.similarities.Similarity; import org.apache.lucene.search.similarities.Similarity;
import org.apache.lucene.search.Scorer.ChildScorer;
/* See the description in BooleanScorer.java, comparing /* See the description in BooleanScorer.java, comparing
* BooleanScorer & BooleanScorer2 */ * BooleanScorer & BooleanScorer2 */

View File

@ -49,7 +49,7 @@ class ConjunctionTermScorer extends Scorer {
private int doNext(int doc) throws IOException { private int doNext(int doc) throws IOException {
do { do {
if (lead.doc == DocsEnum.NO_MORE_DOCS) { if (lead.doc == DocIdSetIterator.NO_MORE_DOCS) {
return NO_MORE_DOCS; return NO_MORE_DOCS;
} }
advanceHead: do { advanceHead: do {

View File

@ -76,7 +76,7 @@ final class ExactPhraseScorer extends Scorer {
// freq of rarest 2 terms is close: // freq of rarest 2 terms is close:
final boolean useAdvance = postings[i].docFreq > 5*postings[0].docFreq; final boolean useAdvance = postings[i].docFreq > 5*postings[0].docFreq;
chunkStates[i] = new ChunkState(postings[i].postings, -postings[i].position, useAdvance); chunkStates[i] = new ChunkState(postings[i].postings, -postings[i].position, useAdvance);
if (i > 0 && postings[i].postings.nextDoc() == DocsEnum.NO_MORE_DOCS) { if (i > 0 && postings[i].postings.nextDoc() == DocIdSetIterator.NO_MORE_DOCS) {
noDocs = true; noDocs = true;
return; return;
} }
@ -89,7 +89,7 @@ final class ExactPhraseScorer extends Scorer {
// first (rarest) term // first (rarest) term
final int doc = chunkStates[0].posEnum.nextDoc(); final int doc = chunkStates[0].posEnum.nextDoc();
if (doc == DocsEnum.NO_MORE_DOCS) { if (doc == DocIdSetIterator.NO_MORE_DOCS) {
docID = doc; docID = doc;
return doc; return doc;
} }
@ -140,8 +140,8 @@ final class ExactPhraseScorer extends Scorer {
// first term // first term
int doc = chunkStates[0].posEnum.advance(target); int doc = chunkStates[0].posEnum.advance(target);
if (doc == DocsEnum.NO_MORE_DOCS) { if (doc == DocIdSetIterator.NO_MORE_DOCS) {
docID = DocsEnum.NO_MORE_DOCS; docID = DocIdSetIterator.NO_MORE_DOCS;
return doc; return doc;
} }
@ -171,7 +171,7 @@ final class ExactPhraseScorer extends Scorer {
} }
doc = chunkStates[0].posEnum.nextDoc(); doc = chunkStates[0].posEnum.nextDoc();
if (doc == DocsEnum.NO_MORE_DOCS) { if (doc == DocIdSetIterator.NO_MORE_DOCS) {
docID = doc; docID = doc;
return doc; return doc;
} }

Some files were not shown because too many files have changed in this diff Show More