mirror of https://github.com/apache/lucene.git
SOLR-2452: Merged with trunk up to r1143468
git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/branches/solr2452@1143567 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
commit
9abc6a2912
|
@ -38,10 +38,13 @@
|
|||
<classpathentry kind="src" path="modules/analysis/stempel/src/java"/>
|
||||
<classpathentry kind="src" path="modules/analysis/stempel/src/resources"/>
|
||||
<classpathentry kind="src" path="modules/analysis/stempel/src/test"/>
|
||||
<classpathentry kind="src" path="modules/analysis/morfologik/src/java"/>
|
||||
<classpathentry kind="src" path="modules/analysis/morfologik/src/test"/>
|
||||
<classpathentry kind="src" path="modules/benchmark/src/java"/>
|
||||
<classpathentry kind="src" path="modules/benchmark/src/test"/>
|
||||
<classpathentry kind="src" path="modules/common/src/java"/>
|
||||
<classpathentry kind="src" path="modules/common/src/test"/>
|
||||
<classpathentry kind="src" path="modules/facet/src/java"/>
|
||||
<classpathentry kind="src" path="modules/facet/src/examples"/>
|
||||
<classpathentry kind="src" path="modules/facet/src/test"/>
|
||||
<classpathentry kind="src" path="modules/grouping/src/java"/>
|
||||
<classpathentry kind="src" path="modules/grouping/src/test"/>
|
||||
<classpathentry kind="src" path="modules/queries/src/java"/>
|
||||
|
@ -80,6 +83,9 @@
|
|||
<classpathentry kind="lib" path="lucene/contrib/queries/lib/jakarta-regexp-1.4.jar"/>
|
||||
<classpathentry kind="lib" path="modules/analysis/icu/lib/icu4j-4_8.jar"/>
|
||||
<classpathentry kind="lib" path="modules/analysis/phonetic/lib/commons-codec-1.4.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-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.1.jar"/>
|
||||
|
|
|
@ -158,7 +158,7 @@
|
|||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.compiler.source" value="1.5"/>
|
||||
<setting id="org.eclipse.jdt.core.compiler.source" value="1.6"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration" value="do not insert"/>
|
||||
|
@ -167,7 +167,7 @@
|
|||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_type_declaration" value="end_of_line"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.compiler.compliance" value="1.5"/>
|
||||
<setting id="org.eclipse.jdt.core.compiler.compliance" value="1.6"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.compact_else_if" value="true"/>
|
||||
|
@ -203,7 +203,7 @@
|
|||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.compiler.codegen.targetPlatform" value="1.5"/>
|
||||
<setting id="org.eclipse.jdt.core.compiler.codegen.targetPlatform" value="1.6"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer" value="do not insert"/>
|
||||
|
|
|
@ -15,11 +15,14 @@
|
|||
<buildFile url="file://$PROJECT_DIR$/lucene/contrib/xml-query-parser/build.xml" />
|
||||
<buildFile url="file://$PROJECT_DIR$/modules/analysis/common/build.xml" />
|
||||
<buildFile url="file://$PROJECT_DIR$/modules/analysis/icu/build.xml" />
|
||||
<buildFile url="file://$PROJECT_DIR$/modules/analysis/morfologik/build.xml" />
|
||||
<buildFile url="file://$PROJECT_DIR$/modules/analysis/phonetic/build.xml" />
|
||||
<buildFile url="file://$PROJECT_DIR$/modules/analysis/smartcn/build.xml" />
|
||||
<buildFile url="file://$PROJECT_DIR$/modules/analysis/stempel/build.xml" />
|
||||
<buildFile url="file://$PROJECT_DIR$/modules/benchmark/build.xml" />
|
||||
<buildFile url="file://$PROJECT_DIR$/modules/facet/build.xml" />
|
||||
<buildFile url="file://$PROJECT_DIR$/modules/grouping/build.xml" />
|
||||
<buildFile url="file://$PROJECT_DIR$/modules/join/build.xml" />
|
||||
<buildFile url="file://$PROJECT_DIR$/modules/suggest/build.xml" />
|
||||
<buildFile url="file://$PROJECT_DIR$/solr/build.xml" />
|
||||
<buildFile url="file://$PROJECT_DIR$/solr/contrib/analysis-extras/build.xml" />
|
||||
|
|
|
@ -16,12 +16,14 @@
|
|||
<module filepath="$PROJECT_DIR$/lucene/contrib/xml-query-parser/xml-query-parser.iml" />
|
||||
<module filepath="$PROJECT_DIR$/modules/analysis/common/analysis-common.iml" />
|
||||
<module filepath="$PROJECT_DIR$/modules/analysis/icu/icu.iml" />
|
||||
<module filepath="$PROJECT_DIR$/modules/analysis/morfologik/morfologik.iml" />
|
||||
<module filepath="$PROJECT_DIR$/modules/analysis/phonetic/phonetic.iml" />
|
||||
<module filepath="$PROJECT_DIR$/modules/analysis/smartcn/smartcn.iml" />
|
||||
<module filepath="$PROJECT_DIR$/modules/analysis/stempel/stempel.iml" />
|
||||
<module filepath="$PROJECT_DIR$/modules/benchmark/benchmark.iml" />
|
||||
<module filepath="$PROJECT_DIR$/modules/common/common.iml" />
|
||||
<module filepath="$PROJECT_DIR$/modules/facet/facet.iml" />
|
||||
<module filepath="$PROJECT_DIR$/modules/grouping/grouping.iml" />
|
||||
<module filepath="$PROJECT_DIR$/modules/join/join.iml" />
|
||||
<module filepath="$PROJECT_DIR$/modules/queries/queries.iml" />
|
||||
<module filepath="$PROJECT_DIR$/modules/suggest/suggest.iml" />
|
||||
<module filepath="$PROJECT_DIR$/solr/solr.iml" />
|
||||
|
|
|
@ -22,13 +22,6 @@
|
|||
<option name="VM_PARAMETERS" value="-ea -Dtests.luceneMatchVersion=4.0 -DtempDir=temp -Djetty.testMode=1 -Djetty.insecurerandom=1 -Dsolr.directoryFactory=org.apache.solr.core.MockDirectoryFactory" />
|
||||
<option name="TEST_SEARCH_SCOPE"><value defaultName="singleModule" /></option>
|
||||
</configuration>
|
||||
<configuration default="false" name="common module" type="JUnit" factoryName="JUnit">
|
||||
<module name="common" />
|
||||
<option name="TEST_OBJECT" value="package" />
|
||||
<option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$/modules/common/build" />
|
||||
<option name="VM_PARAMETERS" value="-ea -DtempDir=temp" />
|
||||
<option name="TEST_SEARCH_SCOPE"><value defaultName="singleModule" /></option>
|
||||
</configuration>
|
||||
<configuration default="false" name="common analysis module" type="JUnit" factoryName="JUnit">
|
||||
<module name="analysis-common" />
|
||||
<option name="TEST_OBJECT" value="package" />
|
||||
|
@ -190,34 +183,33 @@
|
|||
<option name="VM_PARAMETERS" value="-ea -DtempDir=temp" />
|
||||
<option name="TEST_SEARCH_SCOPE"><value defaultName="singleModule" /></option>
|
||||
</configuration>
|
||||
<list size="27">
|
||||
<list size="26">
|
||||
<item index="0" class="java.lang.String" itemvalue="JUnit.analysis-extras contrib" />
|
||||
<item index="1" class="java.lang.String" itemvalue="JUnit.benchmark module" />
|
||||
<item index="2" class="java.lang.String" itemvalue="JUnit.clustering contrib" />
|
||||
<item index="3" class="java.lang.String" itemvalue="JUnit.common module" />
|
||||
<item index="4" class="java.lang.String" itemvalue="JUnit.common analysis module" />
|
||||
<item index="5" class="java.lang.String" itemvalue="JUnit.dataimporthandler contrib" />
|
||||
<item index="6" class="java.lang.String" itemvalue="JUnit.dataimporthandler-extras contrib" />
|
||||
<item index="7" class="java.lang.String" itemvalue="JUnit.extraction contrib" />
|
||||
<item index="8" class="java.lang.String" itemvalue="JUnit.grouping module" />
|
||||
<item index="9" class="java.lang.String" itemvalue="JUnit.highlighter contrib" />
|
||||
<item index="10" class="java.lang.String" itemvalue="JUnit.icu analysis module" />
|
||||
<item index="11" class="java.lang.String" itemvalue="JUnit.instantiated contrib" />
|
||||
<item index="12" class="java.lang.String" itemvalue="JUnit.lucene" />
|
||||
<item index="13" class="java.lang.String" itemvalue="JUnit.memory contrib" />
|
||||
<item index="14" class="java.lang.String" itemvalue="JUnit.misc contrib" />
|
||||
<item index="15" class="java.lang.String" itemvalue="JUnit.phonetic analysis module" />
|
||||
<item index="16" class="java.lang.String" itemvalue="JUnit.queries contrib" />
|
||||
<item index="17" class="java.lang.String" itemvalue="JUnit.queries module" />
|
||||
<item index="18" class="java.lang.String" itemvalue="JUnit.queryparser contrib" />
|
||||
<item index="19" class="java.lang.String" itemvalue="JUnit.smartcn analysis module" />
|
||||
<item index="20" class="java.lang.String" itemvalue="JUnit.solr" />
|
||||
<item index="21" class="java.lang.String" itemvalue="JUnit.spatial contrib" />
|
||||
<item index="22" class="java.lang.String" itemvalue="JUnit.stempel analysis module" />
|
||||
<item index="23" class="java.lang.String" itemvalue="JUnit.suggest module" />
|
||||
<item index="24" class="java.lang.String" itemvalue="JUnit.uima contrib" />
|
||||
<item index="25" class="java.lang.String" itemvalue="JUnit.wordnet contrib" />
|
||||
<item index="26" class="java.lang.String" itemvalue="JUnit.xml-query-parser contrib" />
|
||||
<item index="3" class="java.lang.String" itemvalue="JUnit.common analysis module" />
|
||||
<item index="4" class="java.lang.String" itemvalue="JUnit.dataimporthandler contrib" />
|
||||
<item index="5" class="java.lang.String" itemvalue="JUnit.dataimporthandler-extras contrib" />
|
||||
<item index="6" class="java.lang.String" itemvalue="JUnit.extraction contrib" />
|
||||
<item index="7" class="java.lang.String" itemvalue="JUnit.grouping module" />
|
||||
<item index="8" class="java.lang.String" itemvalue="JUnit.highlighter contrib" />
|
||||
<item index="9" class="java.lang.String" itemvalue="JUnit.icu analysis module" />
|
||||
<item index="10" class="java.lang.String" itemvalue="JUnit.instantiated contrib" />
|
||||
<item index="11" class="java.lang.String" itemvalue="JUnit.lucene" />
|
||||
<item index="12" class="java.lang.String" itemvalue="JUnit.memory contrib" />
|
||||
<item index="13" class="java.lang.String" itemvalue="JUnit.misc contrib" />
|
||||
<item index="14" class="java.lang.String" itemvalue="JUnit.phonetic analysis module" />
|
||||
<item index="15" class="java.lang.String" itemvalue="JUnit.queries contrib" />
|
||||
<item index="16" class="java.lang.String" itemvalue="JUnit.queries module" />
|
||||
<item index="17" class="java.lang.String" itemvalue="JUnit.queryparser contrib" />
|
||||
<item index="18" class="java.lang.String" itemvalue="JUnit.smartcn analysis module" />
|
||||
<item index="19" class="java.lang.String" itemvalue="JUnit.solr" />
|
||||
<item index="20" class="java.lang.String" itemvalue="JUnit.spatial contrib" />
|
||||
<item index="21" class="java.lang.String" itemvalue="JUnit.stempel analysis module" />
|
||||
<item index="22" class="java.lang.String" itemvalue="JUnit.suggest module" />
|
||||
<item index="23" class="java.lang.String" itemvalue="JUnit.uima contrib" />
|
||||
<item index="24" class="java.lang.String" itemvalue="JUnit.wordnet contrib" />
|
||||
<item index="25" class="java.lang.String" itemvalue="JUnit.xml-query-parser contrib" />
|
||||
</list>
|
||||
</component>
|
||||
</project>
|
||||
|
|
|
@ -0,0 +1,27 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="JAVA_MODULE" version="4">
|
||||
<component name="NewModuleRootManager" inherit-compiler-output="false">
|
||||
<output url="file://$MODULE_DIR$/../build/morfologik/classes/java" />
|
||||
<output-test url="file://$MODULE_DIR$/../build/morfologik/classes/test" />
|
||||
<exclude-output />
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/java" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test" isTestSource="true" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
<orderEntry type="module-library">
|
||||
<library>
|
||||
<CLASSES>
|
||||
<root url="file://$MODULE_DIR$/lib" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES />
|
||||
<jarDirectory url="file://$MODULE_DIR$/lib" recursive="false" />
|
||||
</library>
|
||||
</orderEntry>
|
||||
<orderEntry type="library" scope="TEST" name="JUnit" level="project" />
|
||||
<orderEntry type="module" module-name="analysis-common" />
|
||||
<orderEntry type="module" module-name="lucene" />
|
||||
</component>
|
||||
</module>
|
|
@ -0,0 +1,19 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="JAVA_MODULE" version="4">
|
||||
<component name="NewModuleRootManager" inherit-compiler-output="false">
|
||||
<output url="file://$MODULE_DIR$/build/classes/java" />
|
||||
<output-test url="file://$MODULE_DIR$/build/classes/test" />
|
||||
<exclude-output />
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/java" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/examples" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test" isTestSource="true" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/work" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
<orderEntry type="library" scope="TEST" name="JUnit" level="project" />
|
||||
<orderEntry type="module" module-name="analysis-common" />
|
||||
<orderEntry type="module" module-name="lucene" />
|
||||
</component>
|
||||
</module>
|
|
@ -12,6 +12,7 @@
|
|||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
<orderEntry type="library" scope="TEST" name="JUnit" level="project" />
|
||||
<orderEntry type="module" module-name="grouping" />
|
||||
<orderEntry type="module" module-name="lucene" />
|
||||
</component>
|
||||
</module>
|
|
@ -13,6 +13,5 @@
|
|||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
<orderEntry type="library" scope="TEST" name="JUnit" level="project" />
|
||||
<orderEntry type="module" module-name="lucene" />
|
||||
<orderEntry type="module" module-name="common" />
|
||||
</component>
|
||||
</module>
|
||||
|
|
|
@ -30,7 +30,6 @@
|
|||
<orderEntry type="module" module-name="misc" />
|
||||
<orderEntry type="module" module-name="phonetic" />
|
||||
<orderEntry type="module" module-name="suggest" />
|
||||
<orderEntry type="module" module-name="common" />
|
||||
<orderEntry type="module" module-name="analysis-common" />
|
||||
<orderEntry type="module" module-name="lucene" />
|
||||
</component>
|
||||
|
|
|
@ -21,7 +21,7 @@ A. How to use nightly Jenkins-built Lucene/Solr Maven artifacts
|
|||
|
||||
B. How to generate Lucene Maven artifacts
|
||||
|
||||
1. Prerequisites: JDK 1.5+ and Ant 1.7.X
|
||||
1. Prerequisites: JDK 1.6+ and Ant 1.7.X
|
||||
|
||||
2. Run the following command from the lucene/ directory:
|
||||
|
||||
|
@ -59,8 +59,7 @@ D. How to use Maven to build Lucene/Solr
|
|||
|
||||
The details, followed by some example Maven commands:
|
||||
|
||||
1. Prerequisites: JDK 1.5+ (for Lucene); JDK 1.6+ (for Solr);
|
||||
Maven 2.2.1 or 3.0.X
|
||||
1. Prerequisites: JDK 1.6+ and Maven 2.2.1 or 3.0.X
|
||||
|
||||
2. Make sure your sources are up to date. If you checked your sources out
|
||||
from the Apache Subversion repository, run "svn update" from the top
|
||||
|
|
|
@ -0,0 +1,89 @@
|
|||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
<!--
|
||||
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.
|
||||
-->
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<groupId>org.apache.lucene</groupId>
|
||||
<artifactId>lucene-parent</artifactId>
|
||||
<version>@version@</version>
|
||||
<relativePath>../../../lucene/pom.xml</relativePath>
|
||||
</parent>
|
||||
<groupId>org.apache.lucene</groupId>
|
||||
<artifactId>lucene-analyzers-morfologik</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
<name>Lucene Morfologik Polish Lemmatizer</name>
|
||||
<description>
|
||||
A dictionary-driven lemmatizer for Polish (includes morphosyntactic annotations)
|
||||
</description>
|
||||
<properties>
|
||||
<module-directory>modules/analysis/morfologik</module-directory>
|
||||
<build-directory>../build/morfologik</build-directory>
|
||||
</properties>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>lucene-core</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>lucene-test-framework</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>lucene-analyzers-common</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>lucene-analyzers-common</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<type>test-jar</type>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.carrot2</groupId>
|
||||
<artifactId>morfologik-polish</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<build>
|
||||
<directory>${build-directory}</directory>
|
||||
<outputDirectory>${build-directory}/classes/java</outputDirectory>
|
||||
<testOutputDirectory>${build-directory}/classes/test</testOutputDirectory>
|
||||
<sourceDirectory>src/java</sourceDirectory>
|
||||
<testSourceDirectory>src/test</testSourceDirectory>
|
||||
<testResources>
|
||||
<testResource>
|
||||
<directory>${project.build.testSourceDirectory}</directory>
|
||||
<excludes>
|
||||
<exclude>**/*.java</exclude>
|
||||
</excludes>
|
||||
</testResource>
|
||||
</testResources>
|
||||
</build>
|
||||
</project>
|
|
@ -33,6 +33,7 @@
|
|||
<modules>
|
||||
<module>common</module>
|
||||
<module>icu</module>
|
||||
<module>morfologik</module>
|
||||
<module>phonetic</module>
|
||||
<module>smartcn</module>
|
||||
<module>stempel</module>
|
||||
|
|
|
@ -0,0 +1,98 @@
|
|||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
<!--
|
||||
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.
|
||||
-->
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<groupId>org.apache.lucene</groupId>
|
||||
<artifactId>lucene-parent</artifactId>
|
||||
<version>@version@</version>
|
||||
<relativePath>../../lucene/pom.xml</relativePath>
|
||||
</parent>
|
||||
<groupId>org.apache.lucene</groupId>
|
||||
<artifactId>lucene-facet</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
<name>Lucene Facets</name>
|
||||
<description>
|
||||
Package for Faceted Indexing and Search
|
||||
</description>
|
||||
<properties>
|
||||
<module-directory>modules/facet</module-directory>
|
||||
<build-directory>build</build-directory>
|
||||
</properties>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>lucene-core</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>lucene-analyzers-common</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>lucene-test-framework</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<build>
|
||||
<directory>${build-directory}</directory>
|
||||
<outputDirectory>${build-directory}/classes/java</outputDirectory>
|
||||
<testOutputDirectory>${build-directory}/classes/test</testOutputDirectory>
|
||||
<sourceDirectory>src/java</sourceDirectory>
|
||||
<testSourceDirectory>src/test</testSourceDirectory>
|
||||
<testResources>
|
||||
<testResource>
|
||||
<directory>${project.build.testSourceDirectory}</directory>
|
||||
<excludes>
|
||||
<exclude>**/*.java</exclude>
|
||||
</excludes>
|
||||
</testResource>
|
||||
</testResources>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.codehaus.mojo</groupId>
|
||||
<artifactId>build-helper-maven-plugin</artifactId>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>add-source</id>
|
||||
<phase>generate-sources</phase>
|
||||
<goals>
|
||||
<goal>add-source</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<sources>
|
||||
<source>src/examples</source>
|
||||
</sources>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
|
@ -1,71 +1,76 @@
|
|||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
<!--
|
||||
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.
|
||||
-->
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<groupId>org.apache.lucene</groupId>
|
||||
<artifactId>lucene-parent</artifactId>
|
||||
<version>@version@</version>
|
||||
<relativePath>../../lucene/pom.xml</relativePath>
|
||||
</parent>
|
||||
<groupId>org.apache.lucene</groupId>
|
||||
<artifactId>lucene-common-module</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
<name>Lucene Common</name>
|
||||
<description>Lucene Common Module</description>
|
||||
<properties>
|
||||
<module-directory>modules/common</module-directory>
|
||||
<build-directory>build</build-directory>
|
||||
</properties>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>lucene-core</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>lucene-test-framework</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<build>
|
||||
<directory>${build-directory}</directory>
|
||||
<outputDirectory>${build-directory}/classes/java</outputDirectory>
|
||||
<testOutputDirectory>${build-directory}/classes/test</testOutputDirectory>
|
||||
<sourceDirectory>src/java</sourceDirectory>
|
||||
<testSourceDirectory>src/test</testSourceDirectory>
|
||||
<testResources>
|
||||
<testResource>
|
||||
<directory>${project.build.testSourceDirectory}</directory>
|
||||
<excludes>
|
||||
<exclude>**/*.java</exclude>
|
||||
</excludes>
|
||||
</testResource>
|
||||
</testResources>
|
||||
</build>
|
||||
</project>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
<!--
|
||||
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.
|
||||
-->
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<groupId>org.apache.lucene</groupId>
|
||||
<artifactId>lucene-parent</artifactId>
|
||||
<version>@version@</version>
|
||||
<relativePath>../../lucene/pom.xml</relativePath>
|
||||
</parent>
|
||||
<groupId>org.apache.lucene</groupId>
|
||||
<artifactId>lucene-join</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
<name>Lucene Join</name>
|
||||
<description>Lucene Join Module</description>
|
||||
<properties>
|
||||
<module-directory>modules/join</module-directory>
|
||||
<build-directory>build</build-directory>
|
||||
</properties>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>lucene-core</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>lucene-grouping</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>lucene-test-framework</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<build>
|
||||
<directory>${build-directory}</directory>
|
||||
<outputDirectory>${build-directory}/classes/java</outputDirectory>
|
||||
<testOutputDirectory>${build-directory}/classes/test</testOutputDirectory>
|
||||
<sourceDirectory>src/java</sourceDirectory>
|
||||
<testSourceDirectory>src/test</testSourceDirectory>
|
||||
<testResources>
|
||||
<testResource>
|
||||
<directory>${project.build.testSourceDirectory}</directory>
|
||||
<excludes>
|
||||
<exclude>**/*.java</exclude>
|
||||
</excludes>
|
||||
</testResource>
|
||||
</testResources>
|
||||
</build>
|
||||
</project>
|
|
@ -33,8 +33,9 @@
|
|||
<modules>
|
||||
<module>analysis</module>
|
||||
<module>benchmark</module>
|
||||
<module>common</module>
|
||||
<module>facet</module>
|
||||
<module>grouping</module>
|
||||
<module>join</module>
|
||||
<module>queries</module>
|
||||
<module>suggest</module>
|
||||
</modules>
|
||||
|
|
|
@ -41,11 +41,6 @@
|
|||
<artifactId>lucene-core</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>lucene-common-module</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>lucene-test-framework</artifactId>
|
||||
|
|
|
@ -41,7 +41,7 @@
|
|||
<properties>
|
||||
<base.specification.version>4.0.0</base.specification.version>
|
||||
<maven.build.timestamp.format>yyyy-MM-dd HH:mm:ss</maven.build.timestamp.format>
|
||||
<java.compat.version>1.5</java.compat.version>
|
||||
<java.compat.version>1.6</java.compat.version>
|
||||
<jetty.version>6.1.26</jetty.version>
|
||||
<patched.jetty.version>6.1.26-patched-JETTY-1340</patched.jetty.version>
|
||||
<slf4j.version>1.6.1</slf4j.version>
|
||||
|
@ -280,6 +280,11 @@
|
|||
<artifactId>carrot2-core</artifactId>
|
||||
<version>3.5.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.carrot2</groupId>
|
||||
<artifactId>morfologik-polish</artifactId>
|
||||
<version>1.5.2</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.codehaus.woodstox</groupId>
|
||||
<artifactId>wstx-asl</artifactId>
|
||||
|
|
|
@ -101,11 +101,6 @@
|
|||
<artifactId>lucene-grouping</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.lucene</groupId>
|
||||
<artifactId>lucene-common-module</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.lucene</groupId>
|
||||
<artifactId>lucene-queries</artifactId>
|
||||
|
@ -166,6 +161,11 @@
|
|||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>slf4j-jdk14</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.codehaus.woodstox</groupId>
|
||||
<artifactId>wstx-asl</artifactId>
|
||||
<scope>runtime</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>javax.servlet</groupId>
|
||||
<artifactId>servlet-api</artifactId>
|
||||
|
|
|
@ -215,9 +215,36 @@ def testChanges(project, version, changesURLString):
|
|||
raise RuntimeError('did not see Contrib-Changes.html link from %s' % changesURLString)
|
||||
|
||||
s = load(changesURL)
|
||||
checkChangesContent(s, version, changesURL, project, True)
|
||||
|
||||
if s.find('Release %s' % version) == -1:
|
||||
raise RuntimeError('did not see "Release %s" in %s' % (version, changesURL))
|
||||
def testChangesText(dir, version, project):
|
||||
"Checks all CHANGES.txt under this dir."
|
||||
for root, dirs, files in os.walk(dir):
|
||||
|
||||
# NOTE: O(N) but N should be smallish:
|
||||
if 'CHANGES.txt' in files:
|
||||
fullPath = '%s/CHANGES.txt' % root
|
||||
print 'CHECK %s' % fullPath
|
||||
checkChangesContent(open(fullPath).read(), version, fullPath, project, False)
|
||||
|
||||
def checkChangesContent(s, version, name, project, isHTML):
|
||||
|
||||
if isHTML and s.find('Release %s' % version) == -1:
|
||||
raise RuntimeError('did not see "Release %s" in %s' % (version, name))
|
||||
|
||||
if s.lower().find('not yet released') != -1:
|
||||
raise RuntimeError('saw "not yet released" in %s' % name)
|
||||
|
||||
if not isHTML:
|
||||
if project == 'lucene':
|
||||
sub = 'Lucene %s' % version
|
||||
else:
|
||||
sub = version
|
||||
|
||||
if s.find(sub) == -1:
|
||||
# contrib/benchmark never seems to include release info:
|
||||
if name.find('/benchmark/') == -1:
|
||||
raise RuntimeError('did not see "%s" in %s' % (sub, name))
|
||||
|
||||
def run(command, logFile):
|
||||
if os.system('%s > %s 2>&1' % (command, logFile)):
|
||||
|
@ -340,6 +367,8 @@ def verifyUnpacked(project, artifact, unpackPath, version):
|
|||
if project == 'lucene':
|
||||
testDemo(isSrc, version)
|
||||
|
||||
testChangesText('.', version, project)
|
||||
|
||||
def testDemo(isSrc, version):
|
||||
print ' test demo...'
|
||||
if isSrc:
|
||||
|
|
|
@ -152,6 +152,10 @@ Changes in backwards compatibility policy
|
|||
* LUCENE-2548: Field names (eg in Term, FieldInfo) are no longer
|
||||
interned. (Mike McCandless)
|
||||
|
||||
* LUCENE-2883: The contents of o.a.l.search.function has been consolidated into
|
||||
the queries module and can be found at o.a.l.queries.function. See MIGRATE.txt
|
||||
for more information (Chris Male)
|
||||
|
||||
Changes in Runtime Behavior
|
||||
|
||||
* LUCENE-2846: omitNorms now behaves like omitTermFrequencyAndPositions, if you
|
||||
|
|
|
@ -364,3 +364,21 @@ LUCENE-1458, LUCENE-2111: Flexible Indexing
|
|||
for applications that rely on Lucene's internal document ID
|
||||
assigment. If so, you should instead use LogByteSize/DocMergePolicy
|
||||
during indexing.
|
||||
|
||||
* LUCENE-2883: Lucene's o.a.l.search.function ValueSource based functionality, was consolidated
|
||||
into module/queries along with Solr's similar functionality. The following classes were moved:
|
||||
- o.a.l.search.function.CustomScoreQuery -> o.a.l.queries.CustomScoreQuery
|
||||
- o.a.l.search.function.CustomScoreProvider -> o.a.l.queries.CustomScoreProvider
|
||||
- o.a.l.search.function.NumericIndexDocValueSource -> o.a.l.queries.function.valuesource.NumericIndexDocValueSource
|
||||
The following lists the replacement classes for those removed:
|
||||
- o.a.l.search.function.ByteFieldSource -> o.a.l.queries.function.valuesource.ByteFieldSource
|
||||
- o.a.l.search.function.DocValues -> o.a.l.queries.function.DocValues
|
||||
- o.a.l.search.function.FieldCacheSource -> o.a.l.queries.function.valuesource.FieldCacheSource
|
||||
- o.a.l.search.function.FieldScoreQuery ->o.a.l.queries.function.FunctionQuery
|
||||
- o.a.l.search.function.FloatFieldSource -> o.a.l.queries.function.valuesource.FloatFieldSource
|
||||
- o.a.l.search.function.IntFieldSource -> o.a.l.queries.function.valuesource.IntFieldSource
|
||||
- o.a.l.search.function.OrdFieldSource -> o.a.l.queries.function.valuesource.OrdFieldSource
|
||||
- o.a.l.search.function.ReverseOrdFieldSource -> o.a.l.queries.function.valuesource.ReverseOrdFieldSource
|
||||
- o.a.l.search.function.ShortFieldSource -> o.a.l.queries.function.valuesource.ShortFieldSource
|
||||
- o.a.l.search.function.ValueSource -> o.a.l.queries.function.ValueSource
|
||||
- o.a.l.search.function.ValueSourceQuery -> o.a.l.queries.function.FunctionQuery
|
||||
|
|
|
@ -95,15 +95,15 @@
|
|||
|
||||
<property name="javac.deprecation" value="off"/>
|
||||
<property name="javac.debug" value="on"/>
|
||||
<property name="javac.source" value="1.5"/>
|
||||
<property name="javac.target" value="1.5"/>
|
||||
<property name="javac.source.backwards" value="1.5"/>
|
||||
<property name="javac.target.backwards" value="1.5"/>
|
||||
<property name="javac.source" value="1.6"/>
|
||||
<property name="javac.target" value="1.6"/>
|
||||
<property name="javac.source.backwards" value="1.6"/>
|
||||
<property name="javac.target.backwards" value="1.6"/>
|
||||
<!-- clover wants to run with -lib, otherwise we prefer a repeatable
|
||||
classpath -->
|
||||
<property name="javac.includeAntRuntime" value="${run.clover}"/>
|
||||
|
||||
<property name="javadoc.link" value="http://java.sun.com/j2se/1.5/docs/api/"/>
|
||||
<property name="javadoc.link" value="http://download.oracle.com/javase/6/docs/api/"/>
|
||||
<property name="javadoc.access" value="protected"/>
|
||||
<property name="javadoc.charset" value="utf-8"/>
|
||||
<property name="javadoc.dir" value="${common.dir}/build/docs/api"/>
|
||||
|
@ -844,8 +844,6 @@
|
|||
<!-- Lucene -->
|
||||
<arg value="-c" />
|
||||
<arg value="${basedir}/lib" />
|
||||
<arg value="-c" />
|
||||
<arg value="${basedir}/contrib/queries/lib" />
|
||||
</java>
|
||||
</target>
|
||||
|
||||
|
|
|
@ -65,7 +65,19 @@ New Features
|
|||
* LUCENE-3234: provide a limit on phrase analysis in FastVectorHighlighter for
|
||||
highlighting speed up. Use FastVectorHighlighter.setPhraseLimit() to set limit
|
||||
(e.g. 5000). (Mike Sokolov via Koji Sekiguchi)
|
||||
|
||||
|
||||
* LUCENE-3079: a new facet module which provides faceted indexing & search
|
||||
capabilities. It allows managing a taxonomy of categories, and index them
|
||||
with documents. It also provides search API for aggregating (e.g. count)
|
||||
the weights of the categories that are relevant to the search results.
|
||||
(Shai Erera)
|
||||
|
||||
* LUCENE-3171: Added BlockJoinQuery and BlockJoinCollector, under the
|
||||
new contrib/join module, to enable searches that require joining
|
||||
between parent and child documents. Joined (children + parent)
|
||||
documents must be indexed as a document block, using
|
||||
IndexWriter.add/UpdateDocuments (Mark Harwood, Mike McCandless)
|
||||
|
||||
API Changes
|
||||
|
||||
Bug Fixes
|
||||
|
|
|
@ -75,7 +75,7 @@
|
|||
property="pom.xml.present">
|
||||
</available>
|
||||
|
||||
<target name="dist-maven" if="pom.xml.present" depends="compile-core, jar-src">
|
||||
<target name="dist-maven" if="pom.xml.present" depends="jar-core, jar-src, javadocs">
|
||||
<taskdef resource="org/apache/maven/artifact/ant/antlib.xml"
|
||||
uri="antlib:org.apache.maven.artifact.ant"
|
||||
classpathref="maven-ant-tasks.classpath"/>
|
||||
|
|
|
@ -34,8 +34,8 @@ import org.apache.lucene.search.TermQuery;
|
|||
import org.apache.lucene.search.vectorhighlight.FieldTermStack.TermInfo;
|
||||
|
||||
/**
|
||||
* FieldQuery breaks down query object into terms/phrases and keep
|
||||
* them in QueryPhraseMap structure.
|
||||
* FieldQuery breaks down query object into terms/phrases and keeps
|
||||
* them in a QueryPhraseMap structure.
|
||||
*/
|
||||
public class FieldQuery {
|
||||
|
||||
|
|
|
@ -115,8 +115,7 @@ public class FieldTermStack {
|
|||
* @param termInfo the TermInfo object to be put on the top of the stack
|
||||
*/
|
||||
public void push( TermInfo termInfo ){
|
||||
// termList.push( termInfo ); // avoid Java 1.6 feature
|
||||
termList.addFirst( termInfo );
|
||||
termList.push( termInfo );
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -23,13 +23,13 @@ import org.apache.lucene.util.BytesRef;
|
|||
public class InstantiatedDocsAndPositionsEnum extends DocsAndPositionsEnum {
|
||||
private int upto;
|
||||
private int posUpto;
|
||||
private Bits skipDocs;
|
||||
private Bits liveDocs;
|
||||
private InstantiatedTerm term;
|
||||
protected InstantiatedTermDocumentInformation currentDoc;
|
||||
private final BytesRef payload = new BytesRef();
|
||||
|
||||
public InstantiatedDocsAndPositionsEnum reset(Bits skipDocs, InstantiatedTerm term) {
|
||||
this.skipDocs = skipDocs;
|
||||
public InstantiatedDocsAndPositionsEnum reset(Bits liveDocs, InstantiatedTerm term) {
|
||||
this.liveDocs = liveDocs;
|
||||
this.term = term;
|
||||
upto = -1;
|
||||
return this;
|
||||
|
@ -47,7 +47,7 @@ public class InstantiatedDocsAndPositionsEnum extends DocsAndPositionsEnum {
|
|||
return NO_MORE_DOCS;
|
||||
} else {
|
||||
currentDoc = term.getAssociatedDocuments()[upto];
|
||||
if (skipDocs == null || !skipDocs.get(currentDoc.getDocument().getDocumentNumber())) {
|
||||
if (liveDocs == null || liveDocs.get(currentDoc.getDocument().getDocumentNumber())) {
|
||||
posUpto = -1;
|
||||
return docID();
|
||||
} else {
|
||||
|
@ -69,7 +69,7 @@ public class InstantiatedDocsAndPositionsEnum extends DocsAndPositionsEnum {
|
|||
}
|
||||
currentDoc = term.getAssociatedDocuments()[upto];
|
||||
|
||||
if (skipDocs != null && skipDocs.get(currentDoc.getDocument().getDocumentNumber())) {
|
||||
if (liveDocs != null && !liveDocs.get(currentDoc.getDocument().getDocumentNumber())) {
|
||||
return nextDoc();
|
||||
} else {
|
||||
posUpto = -1;
|
||||
|
|
|
@ -21,12 +21,12 @@ import org.apache.lucene.util.Bits;
|
|||
|
||||
public class InstantiatedDocsEnum extends DocsEnum {
|
||||
private int upto;
|
||||
private Bits skipDocs;
|
||||
private Bits liveDocs;
|
||||
private InstantiatedTerm term;
|
||||
protected InstantiatedTermDocumentInformation currentDoc;
|
||||
|
||||
public InstantiatedDocsEnum reset(Bits skipDocs, InstantiatedTerm term) {
|
||||
this.skipDocs = skipDocs;
|
||||
public InstantiatedDocsEnum reset(Bits liveDocs, InstantiatedTerm term) {
|
||||
this.liveDocs = liveDocs;
|
||||
this.term = term;
|
||||
upto = -1;
|
||||
return this;
|
||||
|
@ -44,7 +44,7 @@ public class InstantiatedDocsEnum extends DocsEnum {
|
|||
return NO_MORE_DOCS;
|
||||
} else {
|
||||
currentDoc = term.getAssociatedDocuments()[upto];
|
||||
if (skipDocs == null || !skipDocs.get(currentDoc.getDocument().getDocumentNumber())) {
|
||||
if (liveDocs == null || liveDocs.get(currentDoc.getDocument().getDocumentNumber())) {
|
||||
return docID();
|
||||
} else {
|
||||
return nextDoc();
|
||||
|
@ -65,7 +65,7 @@ public class InstantiatedDocsEnum extends DocsEnum {
|
|||
}
|
||||
currentDoc = term.getAssociatedDocuments()[upto];
|
||||
|
||||
if (skipDocs != null && skipDocs.get(currentDoc.getDocument().getDocumentNumber())) {
|
||||
if (liveDocs != null && !liveDocs.get(currentDoc.getDocument().getDocumentNumber())) {
|
||||
return nextDoc();
|
||||
} else {
|
||||
return docID();
|
||||
|
|
|
@ -182,9 +182,9 @@ public class InstantiatedIndex
|
|||
}
|
||||
|
||||
// create documents
|
||||
final Bits delDocs = MultiFields.getDeletedDocs(sourceIndexReader);
|
||||
final Bits liveDocs = MultiFields.getLiveDocs(sourceIndexReader);
|
||||
for (int i = 0; i < sourceIndexReader.maxDoc(); i++) {
|
||||
if (delDocs != null && delDocs.get(i)) {
|
||||
if (liveDocs != null && !liveDocs.get(i)) {
|
||||
deletedDocuments.set(i);
|
||||
} else {
|
||||
InstantiatedDocument document = new InstantiatedDocument();
|
||||
|
@ -254,7 +254,7 @@ public class InstantiatedIndex
|
|||
// create term-document informations
|
||||
for (InstantiatedTerm term : orderedTerms) {
|
||||
DocsAndPositionsEnum termPositions = MultiFields.getTermPositionsEnum(sourceIndexReader,
|
||||
MultiFields.getDeletedDocs(sourceIndexReader),
|
||||
MultiFields.getLiveDocs(sourceIndexReader),
|
||||
term.getTerm().field(),
|
||||
new BytesRef(term.getTerm().text()));
|
||||
int position = 0;
|
||||
|
|
|
@ -107,11 +107,11 @@ public class InstantiatedIndexReader extends IndexReader {
|
|||
}
|
||||
|
||||
@Override
|
||||
public Bits getDeletedDocs() {
|
||||
public Bits getLiveDocs() {
|
||||
return new Bits() {
|
||||
public boolean get(int n) {
|
||||
return (index.getDeletedDocuments() != null && index.getDeletedDocuments().get(n))
|
||||
|| (uncommittedDeletedDocuments != null && uncommittedDeletedDocuments.get(n));
|
||||
return !(index.getDeletedDocuments() != null && index.getDeletedDocuments().get(n))
|
||||
&& !(uncommittedDeletedDocuments != null && uncommittedDeletedDocuments.get(n));
|
||||
}
|
||||
|
||||
public int length() {
|
||||
|
|
|
@ -118,19 +118,19 @@ public class InstantiatedTermsEnum extends TermsEnum {
|
|||
}
|
||||
|
||||
@Override
|
||||
public DocsEnum docs(Bits skipDocs, DocsEnum reuse) {
|
||||
public DocsEnum docs(Bits liveDocs, DocsEnum reuse) {
|
||||
if (reuse == null || !(reuse instanceof InstantiatedDocsEnum)) {
|
||||
reuse = new InstantiatedDocsEnum();
|
||||
}
|
||||
return ((InstantiatedDocsEnum) reuse).reset(skipDocs, terms[upto]);
|
||||
return ((InstantiatedDocsEnum) reuse).reset(liveDocs, terms[upto]);
|
||||
}
|
||||
|
||||
@Override
|
||||
public DocsAndPositionsEnum docsAndPositions(Bits skipDocs, DocsAndPositionsEnum reuse) {
|
||||
public DocsAndPositionsEnum docsAndPositions(Bits liveDocs, DocsAndPositionsEnum reuse) {
|
||||
if (reuse == null || !(reuse instanceof InstantiatedDocsAndPositionsEnum)) {
|
||||
reuse = new InstantiatedDocsAndPositionsEnum();
|
||||
}
|
||||
return ((InstantiatedDocsAndPositionsEnum) reuse).reset(skipDocs, terms[upto]);
|
||||
return ((InstantiatedDocsAndPositionsEnum) reuse).reset(liveDocs, terms[upto]);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -138,8 +138,8 @@ public class TestIndicesEquals extends LuceneTestCase {
|
|||
testTermEnum.seekCeil(new BytesRef(t.text()));
|
||||
assertEquals(aprioriTermEnum.term(), testTermEnum.term());
|
||||
|
||||
DocsEnum aprioriTermDocs = aprioriTermEnum.docs(MultiFields.getDeletedDocs(aprioriReader), null);
|
||||
DocsEnum testTermDocs = testTermEnum.docs(MultiFields.getDeletedDocs(testReader), null);
|
||||
DocsEnum aprioriTermDocs = aprioriTermEnum.docs(MultiFields.getLiveDocs(aprioriReader), null);
|
||||
DocsEnum testTermDocs = testTermEnum.docs(MultiFields.getLiveDocs(testReader), null);
|
||||
|
||||
assertEquals(aprioriTermDocs.nextDoc(), testTermDocs.nextDoc());
|
||||
assertEquals(aprioriTermDocs.freq(), testTermDocs.freq());
|
||||
|
@ -186,8 +186,8 @@ public class TestIndicesEquals extends LuceneTestCase {
|
|||
|
||||
assertEquals(aprioriTermEnum.next(), testTermEnum.next());
|
||||
|
||||
aprioriTermDocs = aprioriTermEnum.docs(MultiFields.getDeletedDocs(aprioriReader), aprioriTermDocs);
|
||||
testTermDocs = testTermEnum.docs(MultiFields.getDeletedDocs(testReader), testTermDocs);
|
||||
aprioriTermDocs = aprioriTermEnum.docs(MultiFields.getLiveDocs(aprioriReader), aprioriTermDocs);
|
||||
testTermDocs = testTermEnum.docs(MultiFields.getLiveDocs(testReader), testTermDocs);
|
||||
|
||||
while (aprioriTermDocs.nextDoc() != DocsEnum.NO_MORE_DOCS) {
|
||||
assertTrue(testTermDocs.nextDoc() != DocsEnum.NO_MORE_DOCS);
|
||||
|
@ -309,13 +309,13 @@ public class TestIndicesEquals extends LuceneTestCase {
|
|||
assertEquals(air.numDocs(), tir.numDocs());
|
||||
assertEquals(air.numDeletedDocs(), tir.numDeletedDocs());
|
||||
|
||||
final Bits aDelDocs = MultiFields.getDeletedDocs(air);
|
||||
final Bits tDelDocs = MultiFields.getDeletedDocs(tir);
|
||||
assertTrue((aDelDocs != null && tDelDocs != null) ||
|
||||
(aDelDocs == null && tDelDocs == null));
|
||||
if (aDelDocs != null) {
|
||||
final Bits aLiveDocs = MultiFields.getLiveDocs(air);
|
||||
final Bits tLiveDocs = MultiFields.getLiveDocs(tir);
|
||||
assertTrue((aLiveDocs != null && tLiveDocs != null) ||
|
||||
(aLiveDocs == null && tLiveDocs == null));
|
||||
if (aLiveDocs != null) {
|
||||
for (int d =0; d<air.maxDoc(); d++) {
|
||||
assertEquals(aDelDocs.get(d), tDelDocs.get(d));
|
||||
assertEquals(aLiveDocs.get(d), tLiveDocs.get(d));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -366,13 +366,13 @@ public class TestIndicesEquals extends LuceneTestCase {
|
|||
}
|
||||
}
|
||||
|
||||
final Bits apDelDocs = MultiFields.getDeletedDocs(aprioriReader);
|
||||
final Bits testDelDocs = MultiFields.getDeletedDocs(testReader);
|
||||
assertTrue((apDelDocs != null && testDelDocs != null) ||
|
||||
(apDelDocs == null && testDelDocs == null));
|
||||
if (apDelDocs != null) {
|
||||
final Bits apLiveDocs = MultiFields.getLiveDocs(aprioriReader);
|
||||
final Bits testLiveDocs = MultiFields.getLiveDocs(testReader);
|
||||
assertTrue((apLiveDocs != null && testLiveDocs != null) ||
|
||||
(apLiveDocs == null && testLiveDocs == null));
|
||||
if (apLiveDocs != null) {
|
||||
for (int docIndex = 0; docIndex < aprioriReader.numDocs(); docIndex++) {
|
||||
assertEquals(apDelDocs.get(docIndex), testDelDocs.get(docIndex));
|
||||
assertEquals(apLiveDocs.get(docIndex), testLiveDocs.get(docIndex));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -407,8 +407,8 @@ public class TestIndicesEquals extends LuceneTestCase {
|
|||
|
||||
// compare termDocs seeking
|
||||
|
||||
DocsEnum aprioriTermDocs = aprioriTermEnum.docs(MultiFields.getDeletedDocs(aprioriReader), null);
|
||||
DocsEnum testTermDocs = testTermEnum.docs(MultiFields.getDeletedDocs(testReader), null);
|
||||
DocsEnum aprioriTermDocs = aprioriTermEnum.docs(MultiFields.getLiveDocs(aprioriReader), null);
|
||||
DocsEnum testTermDocs = testTermEnum.docs(MultiFields.getLiveDocs(testReader), null);
|
||||
|
||||
while (aprioriTermDocs.nextDoc() != DocsEnum.NO_MORE_DOCS) {
|
||||
assertTrue(testTermDocs.advance(aprioriTermDocs.docID()) != DocsEnum.NO_MORE_DOCS);
|
||||
|
@ -419,8 +419,8 @@ public class TestIndicesEquals extends LuceneTestCase {
|
|||
|
||||
assertEquals(aprioriReader.docFreq(aprioriField, aprioriTermEnum.term()), testReader.docFreq(aprioriField, testTermEnum.term()));
|
||||
|
||||
aprioriTermDocs = aprioriTermEnum.docs(MultiFields.getDeletedDocs(aprioriReader), aprioriTermDocs);
|
||||
testTermDocs = testTermEnum.docs(MultiFields.getDeletedDocs(testReader), testTermDocs);
|
||||
aprioriTermDocs = aprioriTermEnum.docs(MultiFields.getLiveDocs(aprioriReader), aprioriTermDocs);
|
||||
testTermDocs = testTermEnum.docs(MultiFields.getLiveDocs(testReader), testTermDocs);
|
||||
|
||||
while (true) {
|
||||
if (aprioriTermDocs.nextDoc() == DocsEnum.NO_MORE_DOCS) {
|
||||
|
@ -439,8 +439,8 @@ public class TestIndicesEquals extends LuceneTestCase {
|
|||
|
||||
// compare term positions
|
||||
|
||||
DocsAndPositionsEnum aprioriTermPositions = aprioriTermEnum.docsAndPositions(MultiFields.getDeletedDocs(aprioriReader), null);
|
||||
DocsAndPositionsEnum testTermPositions = testTermEnum.docsAndPositions(MultiFields.getDeletedDocs(testReader), null);
|
||||
DocsAndPositionsEnum aprioriTermPositions = aprioriTermEnum.docsAndPositions(MultiFields.getLiveDocs(aprioriReader), null);
|
||||
DocsAndPositionsEnum testTermPositions = testTermEnum.docsAndPositions(MultiFields.getLiveDocs(testReader), null);
|
||||
|
||||
if (VERBOSE) {
|
||||
System.out.println("TEST: enum1=" + aprioriTermPositions + " enum2=" + testTermPositions);
|
||||
|
|
|
@ -53,8 +53,9 @@ public class TestUnoptimizedReaderOnConstructor extends LuceneTestCase {
|
|||
unoptimizedReader.deleteDocument(2);
|
||||
|
||||
try {
|
||||
new InstantiatedIndex(unoptimizedReader);
|
||||
new InstantiatedIndex(unoptimizedReader);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace(System.out);
|
||||
fail("No exceptions when loading an unoptimized reader!");
|
||||
}
|
||||
|
||||
|
|
|
@ -769,7 +769,7 @@ public class MemoryIndex {
|
|||
}
|
||||
|
||||
@Override
|
||||
public Bits getDeletedDocs() {
|
||||
public Bits getLiveDocs() {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
@ -925,19 +925,19 @@ public class MemoryIndex {
|
|||
}
|
||||
|
||||
@Override
|
||||
public DocsEnum docs(Bits skipDocs, DocsEnum reuse) {
|
||||
public DocsEnum docs(Bits liveDocs, DocsEnum reuse) {
|
||||
if (reuse == null || !(reuse instanceof MemoryDocsEnum)) {
|
||||
reuse = new MemoryDocsEnum();
|
||||
}
|
||||
return ((MemoryDocsEnum) reuse).reset(skipDocs, info.sortedTerms[termUpto].getValue());
|
||||
return ((MemoryDocsEnum) reuse).reset(liveDocs, info.sortedTerms[termUpto].getValue());
|
||||
}
|
||||
|
||||
@Override
|
||||
public DocsAndPositionsEnum docsAndPositions(Bits skipDocs, DocsAndPositionsEnum reuse) {
|
||||
public DocsAndPositionsEnum docsAndPositions(Bits liveDocs, DocsAndPositionsEnum reuse) {
|
||||
if (reuse == null || !(reuse instanceof MemoryDocsAndPositionsEnum)) {
|
||||
reuse = new MemoryDocsAndPositionsEnum();
|
||||
}
|
||||
return ((MemoryDocsAndPositionsEnum) reuse).reset(skipDocs, info.sortedTerms[termUpto].getValue());
|
||||
return ((MemoryDocsAndPositionsEnum) reuse).reset(liveDocs, info.sortedTerms[termUpto].getValue());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -962,10 +962,10 @@ public class MemoryIndex {
|
|||
private class MemoryDocsEnum extends DocsEnum {
|
||||
private ArrayIntList positions;
|
||||
private boolean hasNext;
|
||||
private Bits skipDocs;
|
||||
private Bits liveDocs;
|
||||
|
||||
public DocsEnum reset(Bits skipDocs, ArrayIntList positions) {
|
||||
this.skipDocs = skipDocs;
|
||||
public DocsEnum reset(Bits liveDocs, ArrayIntList positions) {
|
||||
this.liveDocs = liveDocs;
|
||||
this.positions = positions;
|
||||
hasNext = true;
|
||||
return this;
|
||||
|
@ -978,7 +978,7 @@ public class MemoryIndex {
|
|||
|
||||
@Override
|
||||
public int nextDoc() {
|
||||
if (hasNext && (skipDocs == null || !skipDocs.get(0))) {
|
||||
if (hasNext && (liveDocs == null || liveDocs.get(0))) {
|
||||
hasNext = false;
|
||||
return 0;
|
||||
} else {
|
||||
|
@ -1001,10 +1001,10 @@ public class MemoryIndex {
|
|||
private ArrayIntList positions;
|
||||
private int posUpto;
|
||||
private boolean hasNext;
|
||||
private Bits skipDocs;
|
||||
private Bits liveDocs;
|
||||
|
||||
public DocsAndPositionsEnum reset(Bits skipDocs, ArrayIntList positions) {
|
||||
this.skipDocs = skipDocs;
|
||||
public DocsAndPositionsEnum reset(Bits liveDocs, ArrayIntList positions) {
|
||||
this.liveDocs = liveDocs;
|
||||
this.positions = positions;
|
||||
posUpto = 0;
|
||||
hasNext = true;
|
||||
|
@ -1018,7 +1018,7 @@ public class MemoryIndex {
|
|||
|
||||
@Override
|
||||
public int nextDoc() {
|
||||
if (hasNext && (skipDocs == null || !skipDocs.get(0))) {
|
||||
if (hasNext && (liveDocs == null || liveDocs.get(0))) {
|
||||
hasNext = false;
|
||||
return 0;
|
||||
} else {
|
||||
|
|
|
@ -120,7 +120,7 @@ public class FieldNormModifier {
|
|||
|
||||
final FieldInvertState invertState = new FieldInvertState();
|
||||
for(IndexReader subReader : subReaders) {
|
||||
final Bits delDocs = subReader.getDeletedDocs();
|
||||
final Bits liveDocs = subReader.getLiveDocs();
|
||||
|
||||
int[] termCounts = new int[subReader.maxDoc()];
|
||||
Fields fields = subReader.fields();
|
||||
|
@ -130,7 +130,7 @@ public class FieldNormModifier {
|
|||
TermsEnum termsEnum = terms.iterator();
|
||||
DocsEnum docs = null;
|
||||
while(termsEnum.next() != null) {
|
||||
docs = termsEnum.docs(delDocs, docs);
|
||||
docs = termsEnum.docs(liveDocs, docs);
|
||||
while(true) {
|
||||
int docID = docs.nextDoc();
|
||||
if (docID != docs.NO_MORE_DOCS) {
|
||||
|
@ -145,7 +145,7 @@ public class FieldNormModifier {
|
|||
|
||||
invertState.setBoost(1.0f);
|
||||
for (int d = 0; d < termCounts.length; d++) {
|
||||
if (delDocs == null || !delDocs.get(d)) {
|
||||
if (liveDocs == null || liveDocs.get(d)) {
|
||||
invertState.setLength(termCounts[d]);
|
||||
subReader.setNorm(d, field, fieldSim.encodeNormValue(fieldSim.computeNorm(invertState)));
|
||||
}
|
||||
|
|
|
@ -25,8 +25,8 @@ import org.apache.lucene.index.IndexWriter; // javadoc
|
|||
import org.apache.lucene.index.IndexWriterConfig.OpenMode;
|
||||
import org.apache.lucene.store.Directory;
|
||||
import org.apache.lucene.store.FSDirectory;
|
||||
import org.apache.lucene.util.OpenBitSet;
|
||||
import org.apache.lucene.util.Bits;
|
||||
import org.apache.lucene.util.OpenBitSet;
|
||||
import org.apache.lucene.util.Version;
|
||||
|
||||
/**
|
||||
|
@ -177,27 +177,17 @@ public class MultiPassIndexSplitter {
|
|||
* Instead, deletions are buffered in a bitset and overlaid with the original
|
||||
* list of deletions.
|
||||
*/
|
||||
public static class FakeDeleteIndexReader extends FilterIndexReader {
|
||||
OpenBitSet dels;
|
||||
OpenBitSet oldDels = null;
|
||||
public static final class FakeDeleteIndexReader extends FilterIndexReader {
|
||||
OpenBitSet liveDocs;
|
||||
|
||||
public FakeDeleteIndexReader(IndexReader in) {
|
||||
super(new SlowMultiReaderWrapper(in));
|
||||
dels = new OpenBitSet(in.maxDoc());
|
||||
if (in.hasDeletions()) {
|
||||
oldDels = new OpenBitSet(in.maxDoc());
|
||||
final Bits oldDelBits = MultiFields.getDeletedDocs(in);
|
||||
assert oldDelBits != null;
|
||||
for (int i = 0; i < in.maxDoc(); i++) {
|
||||
if (oldDelBits.get(i)) oldDels.set(i);
|
||||
}
|
||||
dels.or(oldDels);
|
||||
}
|
||||
doUndeleteAll(); // initialize main bitset
|
||||
}
|
||||
|
||||
@Override
|
||||
public int numDocs() {
|
||||
return in.maxDoc() - (int)dels.cardinality();
|
||||
return (int) liveDocs.cardinality();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -205,26 +195,35 @@ public class MultiPassIndexSplitter {
|
|||
* deletions.
|
||||
*/
|
||||
@Override
|
||||
protected void doUndeleteAll() throws CorruptIndexException, IOException {
|
||||
dels = new OpenBitSet(in.maxDoc());
|
||||
if (oldDels != null) {
|
||||
dels.or(oldDels);
|
||||
protected void doUndeleteAll() {
|
||||
final int maxDoc = in.maxDoc();
|
||||
liveDocs = new OpenBitSet(maxDoc);
|
||||
if (in.hasDeletions()) {
|
||||
final Bits oldLiveDocs = in.getLiveDocs();
|
||||
assert oldLiveDocs != null;
|
||||
// this loop is a little bit ineffective, as Bits has no nextSetBit():
|
||||
for (int i = 0; i < maxDoc; i++) {
|
||||
if (oldLiveDocs.get(i)) liveDocs.fastSet(i);
|
||||
}
|
||||
} else {
|
||||
// mark all docs as valid
|
||||
liveDocs.set(0, maxDoc);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doDelete(int n) throws CorruptIndexException, IOException {
|
||||
dels.set(n);
|
||||
protected void doDelete(int n) {
|
||||
liveDocs.clear(n);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasDeletions() {
|
||||
return !dels.isEmpty();
|
||||
return (in.maxDoc() != this.numDocs());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Bits getDeletedDocs() {
|
||||
return dels;
|
||||
public Bits getLiveDocs() {
|
||||
return liveDocs;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -351,7 +351,7 @@ public class NRTManager implements Closeable {
|
|||
}
|
||||
|
||||
/** NOTE: caller must separately close the writer. */
|
||||
// @Override -- not until Java 1.6
|
||||
@Override
|
||||
public void close() throws IOException {
|
||||
swapSearcher(null, indexingGen.getAndIncrement(), true);
|
||||
}
|
||||
|
|
|
@ -19,16 +19,16 @@ package org.apache.lucene.index;
|
|||
|
||||
import java.io.IOException;
|
||||
|
||||
import org.apache.lucene.index.IndexWriterConfig.OpenMode;
|
||||
import org.apache.lucene.index.IndexReader.AtomicReaderContext;
|
||||
import org.apache.lucene.store.Directory;
|
||||
import org.apache.lucene.index.IndexWriterConfig.OpenMode;
|
||||
import org.apache.lucene.search.DocIdSet;
|
||||
import org.apache.lucene.search.DocIdSetIterator;
|
||||
import org.apache.lucene.search.Filter;
|
||||
import org.apache.lucene.search.TermRangeFilter;
|
||||
import org.apache.lucene.store.Directory;
|
||||
import org.apache.lucene.util.Bits;
|
||||
import org.apache.lucene.util.OpenBitSetDISI;
|
||||
import org.apache.lucene.util.IOUtils;
|
||||
import org.apache.lucene.util.OpenBitSetDISI;
|
||||
import org.apache.lucene.util.Version;
|
||||
|
||||
/**
|
||||
|
@ -87,13 +87,14 @@ public class PKIndexSplitter {
|
|||
}
|
||||
|
||||
public static class DocumentFilteredIndexReader extends FilterIndexReader {
|
||||
final Bits readerDels;
|
||||
final Bits liveDocs;
|
||||
final int numDocs;
|
||||
|
||||
public DocumentFilteredIndexReader(IndexReader reader, Filter preserveFilter, boolean negateFilter) throws IOException {
|
||||
super(new SlowMultiReaderWrapper(reader));
|
||||
|
||||
final OpenBitSetDISI bits = new OpenBitSetDISI(in.maxDoc());
|
||||
final int maxDoc = in.maxDoc();
|
||||
final OpenBitSetDISI bits = new OpenBitSetDISI(maxDoc);
|
||||
final DocIdSet docs = preserveFilter.getDocIdSet((AtomicReaderContext) in.getTopReaderContext());
|
||||
if (docs != null) {
|
||||
final DocIdSetIterator it = docs.iterator();
|
||||
|
@ -101,23 +102,24 @@ public class PKIndexSplitter {
|
|||
bits.inPlaceOr(it);
|
||||
}
|
||||
}
|
||||
// this is somehow inverse, if we negate the filter, we delete all documents it matches!
|
||||
if (!negateFilter) {
|
||||
bits.flip(0, in.maxDoc());
|
||||
if (negateFilter) {
|
||||
bits.flip(0, maxDoc);
|
||||
}
|
||||
|
||||
if (in.hasDeletions()) {
|
||||
final Bits oldDelBits = in.getDeletedDocs();
|
||||
assert oldDelBits != null;
|
||||
for (int i = 0; i < in.maxDoc(); i++) {
|
||||
if (oldDelBits.get(i)) {
|
||||
bits.set(i);
|
||||
final Bits oldLiveDocs = in.getLiveDocs();
|
||||
assert oldLiveDocs != null;
|
||||
final DocIdSetIterator it = bits.iterator();
|
||||
for (int i = it.nextDoc(); i < maxDoc; i = it.nextDoc()) {
|
||||
if (!oldLiveDocs.get(i)) {
|
||||
// we can safely modify the current bit, as the iterator already stepped over it:
|
||||
bits.fastClear(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
this.readerDels = bits;
|
||||
this.numDocs = in.maxDoc() - (int) bits.cardinality();
|
||||
this.liveDocs = bits;
|
||||
this.numDocs = (int) bits.cardinality();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -131,8 +133,8 @@ public class PKIndexSplitter {
|
|||
}
|
||||
|
||||
@Override
|
||||
public Bits getDeletedDocs() {
|
||||
return readerDels;
|
||||
public Bits getLiveDocs() {
|
||||
return liveDocs;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -96,7 +96,7 @@ public class TermVectorAccessor {
|
|||
positions.clear();
|
||||
}
|
||||
|
||||
final Bits delDocs = MultiFields.getDeletedDocs(indexReader);
|
||||
final Bits liveDocs = MultiFields.getLiveDocs(indexReader);
|
||||
|
||||
Terms terms = MultiFields.getTerms(indexReader, field);
|
||||
boolean anyTerms = false;
|
||||
|
@ -109,9 +109,9 @@ public class TermVectorAccessor {
|
|||
if (text != null) {
|
||||
anyTerms = true;
|
||||
if (!mapper.isIgnoringPositions()) {
|
||||
docs = postings = termsEnum.docsAndPositions(delDocs, postings);
|
||||
docs = postings = termsEnum.docsAndPositions(liveDocs, postings);
|
||||
} else {
|
||||
docs = termsEnum.docs(delDocs, docs);
|
||||
docs = termsEnum.docs(liveDocs, docs);
|
||||
}
|
||||
|
||||
int docID = docs.advance(documentNumber);
|
||||
|
|
|
@ -190,8 +190,8 @@ public class HighFreqTerms {
|
|||
return 0;
|
||||
}
|
||||
|
||||
Bits skipDocs = MultiFields.getDeletedDocs(reader);
|
||||
if (skipDocs == null) {
|
||||
Bits liveDocs = MultiFields.getLiveDocs(reader);
|
||||
if (liveDocs == null) {
|
||||
// TODO: we could do this up front, during the scan
|
||||
// (next()), instead of after-the-fact here w/ seek,
|
||||
// if the codec supports it and there are no del
|
||||
|
@ -202,7 +202,7 @@ public class HighFreqTerms {
|
|||
}
|
||||
}
|
||||
|
||||
DocsEnum de = termsEnum.docs(skipDocs, null);
|
||||
DocsEnum de = termsEnum.docs(liveDocs, null);
|
||||
|
||||
// use DocsEnum.read() and BulkResult api
|
||||
final DocsEnum.BulkReadResult bulkresult = de.getBulkResult();
|
||||
|
|
|
@ -134,11 +134,11 @@ public class TestNRTManager extends LuceneTestCase {
|
|||
System.out.println("TEST: now warm merged reader=" + reader);
|
||||
}
|
||||
final int maxDoc = reader.maxDoc();
|
||||
final Bits delDocs = reader.getDeletedDocs();
|
||||
final Bits liveDocs = reader.getLiveDocs();
|
||||
int sum = 0;
|
||||
final int inc = Math.max(1, maxDoc/50);
|
||||
for(int docID=0;docID<maxDoc;docID += inc) {
|
||||
if (delDocs == null || !delDocs.get(docID)) {
|
||||
if (liveDocs == null || liveDocs.get(docID)) {
|
||||
final Document doc = reader.document(docID);
|
||||
sum += doc.getFields().size();
|
||||
}
|
||||
|
|
|
@ -87,9 +87,9 @@ public class TestPKIndexSplitter extends LuceneTestCase {
|
|||
}
|
||||
|
||||
private void checkContents(IndexReader ir, String indexname) throws Exception {
|
||||
final Bits delDocs = MultiFields.getDeletedDocs(ir);
|
||||
final Bits liveDocs = MultiFields.getLiveDocs(ir);
|
||||
for (int i = 0; i < ir.maxDoc(); i++) {
|
||||
if (delDocs == null || !delDocs.get(i)) {
|
||||
if (liveDocs == null || liveDocs.get(i)) {
|
||||
assertEquals(indexname, ir.document(i).get("indexname"));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -86,7 +86,7 @@ public class DuplicateFilter extends Filter
|
|||
|
||||
private OpenBitSet correctBits(IndexReader reader) throws IOException {
|
||||
OpenBitSet bits = new OpenBitSet(reader.maxDoc()); //assume all are INvalid
|
||||
final Bits delDocs = MultiFields.getDeletedDocs(reader);
|
||||
final Bits liveDocs = MultiFields.getLiveDocs(reader);
|
||||
Terms terms = reader.fields().terms(fieldName);
|
||||
if (terms != null) {
|
||||
TermsEnum termsEnum = terms.iterator();
|
||||
|
@ -96,7 +96,7 @@ public class DuplicateFilter extends Filter
|
|||
if (currTerm == null) {
|
||||
break;
|
||||
} else {
|
||||
docs = termsEnum.docs(delDocs, docs);
|
||||
docs = termsEnum.docs(liveDocs, docs);
|
||||
int doc = docs.nextDoc();
|
||||
if (doc != DocsEnum.NO_MORE_DOCS) {
|
||||
if (keepMode == KM_USE_FIRST_OCCURRENCE) {
|
||||
|
@ -124,7 +124,7 @@ public class DuplicateFilter extends Filter
|
|||
|
||||
OpenBitSet bits=new OpenBitSet(reader.maxDoc());
|
||||
bits.set(0,reader.maxDoc()); //assume all are valid
|
||||
final Bits delDocs = MultiFields.getDeletedDocs(reader);
|
||||
final Bits liveDocs = MultiFields.getLiveDocs(reader);
|
||||
Terms terms = reader.fields().terms(fieldName);
|
||||
if (terms != null) {
|
||||
TermsEnum termsEnum = terms.iterator();
|
||||
|
@ -136,7 +136,7 @@ public class DuplicateFilter extends Filter
|
|||
} else {
|
||||
if (termsEnum.docFreq() > 1) {
|
||||
// unset potential duplicates
|
||||
docs = termsEnum.docs(delDocs, docs);
|
||||
docs = termsEnum.docs(liveDocs, docs);
|
||||
int doc = docs.nextDoc();
|
||||
if (doc != DocsEnum.NO_MORE_DOCS) {
|
||||
if (keepMode == KM_USE_FIRST_OCCURRENCE) {
|
||||
|
|
|
@ -63,7 +63,7 @@ public class TermsFilter extends Filter
|
|||
OpenBitSet result=new OpenBitSet(reader.maxDoc());
|
||||
Fields fields = reader.fields();
|
||||
BytesRef br = new BytesRef();
|
||||
Bits delDocs = reader.getDeletedDocs();
|
||||
Bits liveDocs = reader.getLiveDocs();
|
||||
if (fields != null) {
|
||||
String lastField = null;
|
||||
Terms termsC = null;
|
||||
|
@ -80,7 +80,7 @@ public class TermsFilter extends Filter
|
|||
if (terms != null) {
|
||||
br.copy(term.bytes());
|
||||
if (termsEnum.seekCeil(br) == TermsEnum.SeekStatus.FOUND) {
|
||||
docs = termsEnum.docs(delDocs, docs);
|
||||
docs = termsEnum.docs(liveDocs, docs);
|
||||
while(docs.nextDoc() != DocsEnum.NO_MORE_DOCS) {
|
||||
result.set(docs.docID());
|
||||
}
|
||||
|
|
|
@ -139,7 +139,7 @@ public class DuplicateFilterTest extends LuceneTestCase {
|
|||
Document d=searcher.doc(hits[i].doc);
|
||||
String url=d.get(KEY_FIELD);
|
||||
DocsEnum td = MultiFields.getTermDocsEnum(reader,
|
||||
MultiFields.getDeletedDocs(reader),
|
||||
MultiFields.getLiveDocs(reader),
|
||||
KEY_FIELD,
|
||||
new BytesRef(url));
|
||||
int lastDoc=0;
|
||||
|
@ -163,7 +163,7 @@ public class DuplicateFilterTest extends LuceneTestCase {
|
|||
Document d=searcher.doc(hits[i].doc);
|
||||
String url=d.get(KEY_FIELD);
|
||||
DocsEnum td = MultiFields.getTermDocsEnum(reader,
|
||||
MultiFields.getDeletedDocs(reader),
|
||||
MultiFields.getLiveDocs(reader),
|
||||
KEY_FIELD,
|
||||
new BytesRef(url));
|
||||
int lastDoc=0;
|
||||
|
|
|
@ -0,0 +1,118 @@
|
|||
package org.apache.lucene.queryParser.core.config;
|
||||
|
||||
/**
|
||||
* 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.util.HashMap;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* This class is the base of {@link QueryConfigHandler} and {@link FieldConfig}.
|
||||
* It has operations to set, unset and get configuration values.
|
||||
* </p>
|
||||
* <p>
|
||||
* Each configuration is is a key->value pair. The key should be an unique
|
||||
* {@link ConfigurationKey} instance and it also holds the value's type.
|
||||
* </p>
|
||||
*
|
||||
* @see ConfigurationKey
|
||||
*/
|
||||
public abstract class AbstractQueryConfig {
|
||||
|
||||
final private HashMap<ConfigurationKey<?>, Object> configMap = new HashMap<ConfigurationKey<?>, Object>();
|
||||
|
||||
AbstractQueryConfig() {
|
||||
// although this class is public, it can only be constructed from package
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the value held by the given key.
|
||||
*
|
||||
* @param <T> the value's type
|
||||
*
|
||||
* @param key the key, cannot be <code>null</code>
|
||||
*
|
||||
* @return the value held by the given key
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public <T> T get(ConfigurationKey<T> key) {
|
||||
|
||||
if (key == null) {
|
||||
throw new IllegalArgumentException("key cannot be null!");
|
||||
}
|
||||
|
||||
return (T) this.configMap.get(key);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if there is a value set with the given key, otherwise false.
|
||||
*
|
||||
* @param <T> @param <T> the value's type
|
||||
* @param key the key, cannot be <code>null</code>
|
||||
* @return true if there is a value set with the given key, otherwise false
|
||||
*/
|
||||
public <T> boolean has(ConfigurationKey<T> key) {
|
||||
|
||||
if (key == null) {
|
||||
throw new IllegalArgumentException("key cannot be null!");
|
||||
}
|
||||
|
||||
return this.configMap.containsKey(key);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets a key and its value.
|
||||
*
|
||||
* @param <T> the value's type
|
||||
* @param key the key, cannot be <code>null</code>
|
||||
* @param value
|
||||
*/
|
||||
public <T> void set(ConfigurationKey<T> key, T value) {
|
||||
|
||||
if (key == null) {
|
||||
throw new IllegalArgumentException("key cannot be null!");
|
||||
}
|
||||
|
||||
if (value == null) {
|
||||
unset(key);
|
||||
|
||||
} else {
|
||||
this.configMap.put(key, value);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Unsets the given key and its value.
|
||||
*
|
||||
* @param <T> the value's type
|
||||
* @param key the key
|
||||
* @return true if the key and value was set and removed, otherwise false
|
||||
*/
|
||||
public <T> boolean unset(ConfigurationKey<T> key) {
|
||||
|
||||
if (key == null) {
|
||||
throw new IllegalArgumentException("key cannot be null!");
|
||||
}
|
||||
|
||||
return this.configMap.remove(key) != null;
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,42 @@
|
|||
package org.apache.lucene.queryParser.core.config;
|
||||
|
||||
/**
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/**
|
||||
* An instance of this class represents a key that is used to retrieve a value
|
||||
* from {@link AbstractQueryConfig}. It also holds the value's type, which is
|
||||
* defined in the generic argument.
|
||||
*
|
||||
* @see AbstractQueryConfig
|
||||
*/
|
||||
final public class ConfigurationKey<T> {
|
||||
|
||||
private ConfigurationKey() {}
|
||||
|
||||
/**
|
||||
* Creates a new instance.
|
||||
*
|
||||
* @param <T> the value's type
|
||||
*
|
||||
* @return a new instance
|
||||
*/
|
||||
public static <T> ConfigurationKey<T> newInstance() {
|
||||
return new ConfigurationKey<T>();
|
||||
}
|
||||
|
||||
}
|
|
@ -17,16 +17,10 @@ package org.apache.lucene.queryParser.core.config;
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import org.apache.lucene.util.AttributeSource;
|
||||
|
||||
/**
|
||||
* This class represents a field configuration. Every configuration should be
|
||||
* set using the methods inherited from {@link AttributeSource}.
|
||||
*
|
||||
* @see QueryConfigHandler
|
||||
* @see org.apache.lucene.util.Attribute
|
||||
* This class represents a field configuration.
|
||||
*/
|
||||
public class FieldConfig extends AttributeSource {
|
||||
public class FieldConfig extends AbstractQueryConfig {
|
||||
|
||||
private String fieldName;
|
||||
|
||||
|
@ -57,7 +51,7 @@ public class FieldConfig extends AttributeSource {
|
|||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "<fieldconfig name=\"" + this.fieldName + "\" attributes=\""
|
||||
return "<fieldconfig name=\"" + this.fieldName + "\" configurations=\""
|
||||
+ super.toString() + "\"/>";
|
||||
}
|
||||
|
||||
|
|
|
@ -20,7 +20,7 @@ package org.apache.lucene.queryParser.core.config;
|
|||
/**
|
||||
* This interface should be implemented by classes that wants to listen for
|
||||
* field configuration requests. The implementation receives a
|
||||
* {@link FieldConfig} object and may add/change its attributes.
|
||||
* {@link FieldConfig} object and may add/change its configuration.
|
||||
*
|
||||
* @see FieldConfig
|
||||
* @see QueryConfigHandler
|
||||
|
|
|
@ -20,33 +20,28 @@ package org.apache.lucene.queryParser.core.config;
|
|||
import java.util.LinkedList;
|
||||
|
||||
import org.apache.lucene.queryParser.core.processors.QueryNodeProcessor;
|
||||
import org.apache.lucene.util.Attribute;
|
||||
import org.apache.lucene.util.AttributeSource;
|
||||
import org.apache.lucene.queryParser.core.util.StringUtils;
|
||||
|
||||
/**
|
||||
* This class can be used to hold any query configuration and no field
|
||||
* configuration. For field configuration, it creates a empty
|
||||
* configuration. For field configuration, it creates an empty
|
||||
* {@link FieldConfig} object and delegate it to field config listeners,
|
||||
* these are responsible for setting up all the field configuration.
|
||||
*
|
||||
* {@link QueryConfigHandler} should be extended by classes that intends to
|
||||
* provide configuration to {@link QueryNodeProcessor} objects.
|
||||
*
|
||||
* This class extends {@link AttributeSource}, so {@link Attribute}s can be
|
||||
* attached to it.
|
||||
*
|
||||
* The class that extends {@link QueryConfigHandler} should also provide
|
||||
* {@link FieldConfig} objects for each collection field.
|
||||
*
|
||||
* @see Attribute
|
||||
* @see FieldConfig
|
||||
* @see FieldConfigListener
|
||||
* @see QueryConfigHandler
|
||||
*/
|
||||
public abstract class QueryConfigHandler extends AttributeSource {
|
||||
|
||||
private LinkedList<FieldConfigListener> listeners = new LinkedList<FieldConfigListener>();
|
||||
public abstract class QueryConfigHandler extends AbstractQueryConfig {
|
||||
|
||||
final private LinkedList<FieldConfigListener> listeners = new LinkedList<FieldConfigListener>();
|
||||
|
||||
/**
|
||||
* Returns an implementation of
|
||||
* {@link FieldConfig} for a specific field name. If the implemented
|
||||
|
@ -61,7 +56,7 @@ public abstract class QueryConfigHandler extends AttributeSource {
|
|||
* {@link QueryConfigHandler} has no configuration for that field
|
||||
*/
|
||||
public FieldConfig getFieldConfig(String fieldName) {
|
||||
FieldConfig fieldConfig = new FieldConfig(fieldName);
|
||||
FieldConfig fieldConfig = new FieldConfig(StringUtils.toString(fieldName));
|
||||
|
||||
for (FieldConfigListener listener : this.listeners) {
|
||||
listener.buildFieldConfig(fieldConfig);
|
||||
|
|
|
@ -33,14 +33,7 @@ See {@link org.apache.lucene.queryParser.standard.config.StandardQueryConfigHand
|
|||
implementation.
|
||||
</p>
|
||||
<p>
|
||||
{@link org.apache.lucene.queryParser.core.config.FieldConfig} and {@link org.apache.lucene.queryParser.core.config.QueryConfigHandler}
|
||||
should use {@link org.apache.lucene.util.Attribute} to store all attributes
|
||||
required by the config implementation. See <tt>org.apache.lucene.queryParser.standard.config.*Attribute</tt>
|
||||
for reference implementation.
|
||||
</p>
|
||||
<p>
|
||||
The {@link org.apache.lucene.queryParser.core.config.QueryConfigHandler}, {@link org.apache.lucene.queryParser.core.config.FieldConfig},
|
||||
and {@link org.apache.lucene.util.Attribute}s are used in the processors to access config
|
||||
The {@link org.apache.lucene.queryParser.core.config.QueryConfigHandler} and {@link org.apache.lucene.queryParser.core.config.FieldConfig} are used in the processors to access config
|
||||
information in a flexible and independent way.
|
||||
See {@link org.apache.lucene.queryParser.standard.processors.ParametricRangeQueryNodeProcessor} for a
|
||||
reference implementation.
|
||||
|
|
|
@ -29,8 +29,9 @@ import org.apache.lucene.queryParser.core.nodes.QueryNode;
|
|||
import org.apache.lucene.queryParser.core.nodes.ModifierQueryNode.Modifier;
|
||||
import org.apache.lucene.queryParser.core.processors.QueryNodeProcessorImpl;
|
||||
import org.apache.lucene.queryParser.precedence.PrecedenceQueryParser;
|
||||
import org.apache.lucene.queryParser.standard.config.DefaultOperatorAttribute;
|
||||
import org.apache.lucene.queryParser.standard.config.DefaultOperatorAttribute.Operator;
|
||||
import org.apache.lucene.queryParser.standard.config.StandardQueryConfigHandler;
|
||||
import org.apache.lucene.queryParser.standard.config.StandardQueryConfigHandler.ConfigurationKeys;
|
||||
import org.apache.lucene.queryParser.standard.config.StandardQueryConfigHandler.Operator;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
|
@ -44,7 +45,7 @@ import org.apache.lucene.queryParser.standard.config.DefaultOperatorAttribute.Op
|
|||
* if it is, the same operation when an {@link AndQueryNode} is found is applied to it.
|
||||
* </p>
|
||||
*
|
||||
* @see DefaultOperatorAttribute
|
||||
* @see ConfigurationKeys#DEFAULT_OPERATOR
|
||||
* @see PrecedenceQueryParser#setDefaultOperator
|
||||
*/
|
||||
public class BooleanModifiersQueryNodeProcessor extends QueryNodeProcessorImpl {
|
||||
|
@ -59,14 +60,14 @@ public class BooleanModifiersQueryNodeProcessor extends QueryNodeProcessorImpl {
|
|||
|
||||
@Override
|
||||
public QueryNode process(QueryNode queryTree) throws QueryNodeException {
|
||||
|
||||
if (!getQueryConfigHandler().hasAttribute(DefaultOperatorAttribute.class)) {
|
||||
Operator op = getQueryConfigHandler().get(ConfigurationKeys.DEFAULT_OPERATOR);
|
||||
|
||||
if (op == null) {
|
||||
throw new IllegalArgumentException(
|
||||
"DefaultOperatorAttribute should be set on the QueryConfigHandler");
|
||||
"StandardQueryConfigHandler.ConfigurationKeys.DEFAULT_OPERATOR should be set on the QueryConfigHandler");
|
||||
}
|
||||
|
||||
this.usingAnd = Operator.AND == getQueryConfigHandler().getAttribute(
|
||||
DefaultOperatorAttribute.class).getOperator();
|
||||
this.usingAnd = StandardQueryConfigHandler.Operator.AND == op;
|
||||
|
||||
return super.process(queryTree);
|
||||
|
||||
|
|
|
@ -23,25 +23,15 @@ import java.util.TooManyListenersException;
|
|||
|
||||
import org.apache.lucene.analysis.Analyzer;
|
||||
import org.apache.lucene.document.DateTools;
|
||||
import org.apache.lucene.document.DateTools.Resolution;
|
||||
import org.apache.lucene.queryParser.core.QueryNodeException;
|
||||
import org.apache.lucene.queryParser.core.QueryParserHelper;
|
||||
import org.apache.lucene.queryParser.core.config.QueryConfigHandler;
|
||||
import org.apache.lucene.queryParser.standard.builders.StandardQueryTreeBuilder;
|
||||
import org.apache.lucene.queryParser.standard.config.AllowLeadingWildcardAttribute;
|
||||
import org.apache.lucene.queryParser.standard.config.AnalyzerAttribute;
|
||||
import org.apache.lucene.queryParser.standard.config.DateResolutionAttribute;
|
||||
import org.apache.lucene.queryParser.standard.config.DefaultOperatorAttribute;
|
||||
import org.apache.lucene.queryParser.standard.config.DefaultPhraseSlopAttribute;
|
||||
import org.apache.lucene.queryParser.standard.config.FieldBoostMapAttribute;
|
||||
import org.apache.lucene.queryParser.standard.config.FieldDateResolutionMapAttribute;
|
||||
import org.apache.lucene.queryParser.standard.config.FuzzyAttribute;
|
||||
import org.apache.lucene.queryParser.standard.config.LocaleAttribute;
|
||||
import org.apache.lucene.queryParser.standard.config.LowercaseExpandedTermsAttribute;
|
||||
import org.apache.lucene.queryParser.standard.config.MultiFieldAttribute;
|
||||
import org.apache.lucene.queryParser.standard.config.MultiTermRewriteMethodAttribute;
|
||||
import org.apache.lucene.queryParser.standard.config.PositionIncrementsAttribute;
|
||||
import org.apache.lucene.queryParser.standard.config.FuzzyConfig;
|
||||
import org.apache.lucene.queryParser.standard.config.StandardQueryConfigHandler;
|
||||
import org.apache.lucene.queryParser.standard.config.DefaultOperatorAttribute.Operator;
|
||||
import org.apache.lucene.queryParser.standard.config.StandardQueryConfigHandler.ConfigurationKeys;
|
||||
import org.apache.lucene.queryParser.standard.config.StandardQueryConfigHandler.Operator;
|
||||
import org.apache.lucene.queryParser.standard.parser.StandardSyntaxParser;
|
||||
import org.apache.lucene.queryParser.standard.processors.StandardQueryNodeProcessorPipeline;
|
||||
import org.apache.lucene.search.FuzzyQuery;
|
||||
|
@ -179,9 +169,8 @@ public class StandardQueryParser extends QueryParserHelper {
|
|||
* Gets implicit operator setting, which will be either {@link Operator#AND}
|
||||
* or {@link Operator#OR}.
|
||||
*/
|
||||
public Operator getDefaultOperator() {
|
||||
DefaultOperatorAttribute attr = getQueryConfigHandler().getAttribute(DefaultOperatorAttribute.class);
|
||||
return attr.getOperator();
|
||||
public StandardQueryConfigHandler.Operator getDefaultOperator() {
|
||||
return getQueryConfigHandler().get(ConfigurationKeys.DEFAULT_OPERATOR);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -192,9 +181,8 @@ public class StandardQueryParser extends QueryParserHelper {
|
|||
* In {@link Operator#AND} mode terms are considered to be in conjunction: the
|
||||
* above mentioned query is parsed as <code>capital AND of AND Hungary</code>
|
||||
*/
|
||||
public void setDefaultOperator(Operator operator) {
|
||||
DefaultOperatorAttribute attr = getQueryConfigHandler().getAttribute(DefaultOperatorAttribute.class);
|
||||
attr.setOperator(operator);
|
||||
public void setDefaultOperator(StandardQueryConfigHandler.Operator operator) {
|
||||
getQueryConfigHandler().set(ConfigurationKeys.DEFAULT_OPERATOR, operator);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -207,16 +195,22 @@ public class StandardQueryParser extends QueryParserHelper {
|
|||
* Default: false.
|
||||
*/
|
||||
public void setLowercaseExpandedTerms(boolean lowercaseExpandedTerms) {
|
||||
LowercaseExpandedTermsAttribute attr = getQueryConfigHandler().getAttribute(LowercaseExpandedTermsAttribute.class);
|
||||
attr.setLowercaseExpandedTerms(lowercaseExpandedTerms);
|
||||
getQueryConfigHandler().set(ConfigurationKeys.LOWERCASE_EXPANDED_TERMS, lowercaseExpandedTerms);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see #setLowercaseExpandedTerms(boolean)
|
||||
*/
|
||||
public boolean getLowercaseExpandedTerms() {
|
||||
LowercaseExpandedTermsAttribute attr = getQueryConfigHandler().getAttribute(LowercaseExpandedTermsAttribute.class);
|
||||
return attr.isLowercaseExpandedTerms();
|
||||
Boolean lowercaseExpandedTerms = getQueryConfigHandler().get(ConfigurationKeys.LOWERCASE_EXPANDED_TERMS);
|
||||
|
||||
if (lowercaseExpandedTerms == null) {
|
||||
return true;
|
||||
|
||||
} else {
|
||||
return lowercaseExpandedTerms;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -229,8 +223,7 @@ public class StandardQueryParser extends QueryParserHelper {
|
|||
* Default: false.
|
||||
*/
|
||||
public void setAllowLeadingWildcard(boolean allowLeadingWildcard) {
|
||||
AllowLeadingWildcardAttribute attr = getQueryConfigHandler().getAttribute(AllowLeadingWildcardAttribute.class);
|
||||
attr.setAllowLeadingWildcard(allowLeadingWildcard);
|
||||
getQueryConfigHandler().set(ConfigurationKeys.ALLOW_LEADING_WILDCARD, allowLeadingWildcard);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -243,16 +236,22 @@ public class StandardQueryParser extends QueryParserHelper {
|
|||
* Default: false.
|
||||
*/
|
||||
public void setEnablePositionIncrements(boolean enabled) {
|
||||
PositionIncrementsAttribute attr = getQueryConfigHandler().getAttribute(PositionIncrementsAttribute.class);
|
||||
attr.setPositionIncrementsEnabled(enabled);
|
||||
getQueryConfigHandler().set(ConfigurationKeys.ENABLE_POSITION_INCREMENTS, enabled);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see #setEnablePositionIncrements(boolean)
|
||||
*/
|
||||
public boolean getEnablePositionIncrements() {
|
||||
PositionIncrementsAttribute attr = getQueryConfigHandler().getAttribute(PositionIncrementsAttribute.class);
|
||||
return attr.isPositionIncrementsEnabled();
|
||||
Boolean enablePositionsIncrements = getQueryConfigHandler().get(ConfigurationKeys.ENABLE_POSITION_INCREMENTS);
|
||||
|
||||
if (enablePositionsIncrements == null) {
|
||||
return false;
|
||||
|
||||
} else {
|
||||
return enablePositionsIncrements;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -266,29 +265,42 @@ public class StandardQueryParser extends QueryParserHelper {
|
|||
* not relevant then use this change the rewrite method.
|
||||
*/
|
||||
public void setMultiTermRewriteMethod(MultiTermQuery.RewriteMethod method) {
|
||||
MultiTermRewriteMethodAttribute attr = getQueryConfigHandler().getAttribute(MultiTermRewriteMethodAttribute.class);
|
||||
attr.setMultiTermRewriteMethod(method);
|
||||
getQueryConfigHandler().set(ConfigurationKeys.MULTI_TERM_REWRITE_METHOD, method);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see #setMultiTermRewriteMethod(org.apache.lucene.search.MultiTermQuery.RewriteMethod)
|
||||
*/
|
||||
public MultiTermQuery.RewriteMethod getMultiTermRewriteMethod() {
|
||||
MultiTermRewriteMethodAttribute attr = getQueryConfigHandler().getAttribute(MultiTermRewriteMethodAttribute.class);
|
||||
return attr.getMultiTermRewriteMethod();
|
||||
return getQueryConfigHandler().get(ConfigurationKeys.MULTI_TERM_REWRITE_METHOD);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the fields a query should be expanded to when the field is
|
||||
* <code>null</code>
|
||||
*
|
||||
* @param fields the fields used to expand the query
|
||||
*/
|
||||
public void setMultiFields(CharSequence[] fields) {
|
||||
|
||||
if (fields == null) {
|
||||
fields = new CharSequence[0];
|
||||
}
|
||||
|
||||
MultiFieldAttribute attr = getQueryConfigHandler().addAttribute(MultiFieldAttribute.class);
|
||||
attr.setFields(fields);
|
||||
getQueryConfigHandler().set(ConfigurationKeys.MULTI_FIELDS, fields);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the fields used to expand the query when the field for a
|
||||
* certain query is <code>null</code>
|
||||
*
|
||||
* @param fields the fields used to expand the query
|
||||
*/
|
||||
public void getMultiFields(CharSequence[] fields) {
|
||||
getQueryConfigHandler().get(ConfigurationKeys.MULTI_FIELDS);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the prefix length for fuzzy queries. Default is 0.
|
||||
*
|
||||
|
@ -296,65 +308,84 @@ public class StandardQueryParser extends QueryParserHelper {
|
|||
* The fuzzyPrefixLength to set.
|
||||
*/
|
||||
public void setFuzzyPrefixLength(int fuzzyPrefixLength) {
|
||||
FuzzyAttribute attr = getQueryConfigHandler().addAttribute(FuzzyAttribute.class);
|
||||
attr.setPrefixLength(fuzzyPrefixLength);
|
||||
QueryConfigHandler config = getQueryConfigHandler();
|
||||
FuzzyConfig fuzzyConfig = config.get(ConfigurationKeys.FUZZY_CONFIG);
|
||||
|
||||
if (fuzzyConfig == null) {
|
||||
fuzzyConfig = new FuzzyConfig();
|
||||
config.set(ConfigurationKeys.FUZZY_CONFIG, fuzzyConfig);
|
||||
}
|
||||
|
||||
fuzzyConfig.setPrefixLength(fuzzyPrefixLength);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Set locale used by date range parsing.
|
||||
*/
|
||||
public void setLocale(Locale locale) {
|
||||
LocaleAttribute attr = getQueryConfigHandler().addAttribute(LocaleAttribute.class);
|
||||
attr.setLocale(locale);
|
||||
getQueryConfigHandler().set(ConfigurationKeys.LOCALE, locale);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns current locale, allowing access by subclasses.
|
||||
*/
|
||||
public Locale getLocale() {
|
||||
LocaleAttribute attr = getQueryConfigHandler().addAttribute(LocaleAttribute.class);
|
||||
return attr.getLocale();
|
||||
return getQueryConfigHandler().get(ConfigurationKeys.LOCALE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the default slop for phrases. If zero, then exact phrase matches are
|
||||
* required. Default value is zero.
|
||||
*
|
||||
* @deprecated renamed to {@link #setPhraseSlop(int)}
|
||||
*/
|
||||
@Deprecated
|
||||
public void setDefaultPhraseSlop(int defaultPhraseSlop) {
|
||||
DefaultPhraseSlopAttribute attr = getQueryConfigHandler().addAttribute(DefaultPhraseSlopAttribute.class);
|
||||
attr.setDefaultPhraseSlop(defaultPhraseSlop);
|
||||
getQueryConfigHandler().set(ConfigurationKeys.PHRASE_SLOP, defaultPhraseSlop);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the default slop for phrases. If zero, then exact phrase matches are
|
||||
* required. Default value is zero.
|
||||
*/
|
||||
public void setPhraseSlop(int defaultPhraseSlop) {
|
||||
getQueryConfigHandler().set(ConfigurationKeys.PHRASE_SLOP, defaultPhraseSlop);
|
||||
}
|
||||
|
||||
public void setAnalyzer(Analyzer analyzer) {
|
||||
AnalyzerAttribute attr = getQueryConfigHandler().getAttribute(AnalyzerAttribute.class);
|
||||
attr.setAnalyzer(analyzer);
|
||||
getQueryConfigHandler().set(ConfigurationKeys.ANALYZER, analyzer);
|
||||
}
|
||||
|
||||
public Analyzer getAnalyzer() {
|
||||
QueryConfigHandler config = this.getQueryConfigHandler();
|
||||
|
||||
if ( config.hasAttribute(AnalyzerAttribute.class)) {
|
||||
AnalyzerAttribute attr = config.getAttribute(AnalyzerAttribute.class);
|
||||
return attr.getAnalyzer();
|
||||
}
|
||||
|
||||
return null;
|
||||
return getQueryConfigHandler().get(ConfigurationKeys.ANALYZER);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see #setAllowLeadingWildcard(boolean)
|
||||
*/
|
||||
public boolean getAllowLeadingWildcard() {
|
||||
AllowLeadingWildcardAttribute attr = getQueryConfigHandler().addAttribute(AllowLeadingWildcardAttribute.class);
|
||||
return attr.isAllowLeadingWildcard();
|
||||
Boolean allowLeadingWildcard = getQueryConfigHandler().get(ConfigurationKeys.ALLOW_LEADING_WILDCARD);
|
||||
|
||||
if (allowLeadingWildcard == null) {
|
||||
return false;
|
||||
|
||||
} else {
|
||||
return allowLeadingWildcard;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the minimal similarity for fuzzy queries.
|
||||
*/
|
||||
public float getFuzzyMinSim() {
|
||||
FuzzyAttribute attr = getQueryConfigHandler().addAttribute(FuzzyAttribute.class);
|
||||
return attr.getFuzzyMinSimilarity();
|
||||
FuzzyConfig fuzzyConfig = getQueryConfigHandler().get(ConfigurationKeys.FUZZY_CONFIG);
|
||||
|
||||
if (fuzzyConfig == null) {
|
||||
return FuzzyQuery.defaultMinSimilarity;
|
||||
} else {
|
||||
return fuzzyConfig.getMinSimilarity();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -363,16 +394,27 @@ public class StandardQueryParser extends QueryParserHelper {
|
|||
* @return Returns the fuzzyPrefixLength.
|
||||
*/
|
||||
public int getFuzzyPrefixLength() {
|
||||
FuzzyAttribute attr = getQueryConfigHandler().addAttribute(FuzzyAttribute.class);
|
||||
return attr.getPrefixLength();
|
||||
FuzzyConfig fuzzyConfig = getQueryConfigHandler().get(ConfigurationKeys.FUZZY_CONFIG);
|
||||
|
||||
if (fuzzyConfig == null) {
|
||||
return FuzzyQuery.defaultPrefixLength;
|
||||
} else {
|
||||
return fuzzyConfig.getPrefixLength();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the default slop for phrases.
|
||||
*/
|
||||
public int getPhraseSlop() {
|
||||
DefaultPhraseSlopAttribute attr = getQueryConfigHandler().addAttribute(DefaultPhraseSlopAttribute.class);
|
||||
return attr.getDefaultPhraseSlop();
|
||||
Integer phraseSlop = getQueryConfigHandler().get(ConfigurationKeys.PHRASE_SLOP);
|
||||
|
||||
if (phraseSlop == null) {
|
||||
return 0;
|
||||
|
||||
} else {
|
||||
return phraseSlop;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -380,23 +422,83 @@ public class StandardQueryParser extends QueryParserHelper {
|
|||
* {@link FuzzyQuery#defaultMinSimilarity}.
|
||||
*/
|
||||
public void setFuzzyMinSim(float fuzzyMinSim) {
|
||||
FuzzyAttribute attr = getQueryConfigHandler().addAttribute(FuzzyAttribute.class);
|
||||
attr.setFuzzyMinSimilarity(fuzzyMinSim);
|
||||
QueryConfigHandler config = getQueryConfigHandler();
|
||||
FuzzyConfig fuzzyConfig = config.get(ConfigurationKeys.FUZZY_CONFIG);
|
||||
|
||||
if (fuzzyConfig == null) {
|
||||
fuzzyConfig = new FuzzyConfig();
|
||||
config.set(ConfigurationKeys.FUZZY_CONFIG, fuzzyConfig);
|
||||
}
|
||||
|
||||
fuzzyConfig.setMinSimilarity(fuzzyMinSim);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the boost used for each field.
|
||||
*
|
||||
* @param boosts a collection that maps a field to its boost
|
||||
*/
|
||||
public void setFieldsBoost(Map<String, Float> boosts) {
|
||||
FieldBoostMapAttribute attr = getQueryConfigHandler().addAttribute(FieldBoostMapAttribute.class);
|
||||
attr.setFieldBoostMap(boosts);
|
||||
getQueryConfigHandler().set(ConfigurationKeys.FIELD_BOOST_MAP, boosts);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the field to boost map used to set boost for each field.
|
||||
*
|
||||
* @return the field to boost map
|
||||
*/
|
||||
public Map<String, Float> getFieldsBoost() {
|
||||
return getQueryConfigHandler().get(ConfigurationKeys.FIELD_BOOST_MAP);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the default {@link Resolution} used for certain field when
|
||||
* no {@link Resolution} is defined for this field.
|
||||
*
|
||||
* @param dateResolution the default {@link Resolution}
|
||||
*/
|
||||
public void setDateResolution(DateTools.Resolution dateResolution) {
|
||||
DateResolutionAttribute attr = getQueryConfigHandler().addAttribute(DateResolutionAttribute.class);
|
||||
attr.setDateResolution(dateResolution);
|
||||
getQueryConfigHandler().set(ConfigurationKeys.DATE_RESOLUTION, dateResolution);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the default {@link Resolution} used for certain field when
|
||||
* no {@link Resolution} is defined for this field.
|
||||
*
|
||||
* @return the default {@link Resolution}
|
||||
*/
|
||||
public DateTools.Resolution getDateResolution() {
|
||||
return getQueryConfigHandler().get(ConfigurationKeys.DATE_RESOLUTION);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the {@link Resolution} used for each field
|
||||
*
|
||||
* @param dateRes a collection that maps a field to its {@link Resolution}
|
||||
*
|
||||
* @deprecated this method was renamed to {@link #setDateResolutionMap(Map)}
|
||||
*/
|
||||
@Deprecated
|
||||
public void setDateResolution(Map<CharSequence, DateTools.Resolution> dateRes) {
|
||||
FieldDateResolutionMapAttribute attr = getQueryConfigHandler().addAttribute(FieldDateResolutionMapAttribute.class);
|
||||
attr.setFieldDateResolutionMap(dateRes);
|
||||
setDateResolutionMap(dateRes);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the field to {@link Resolution} map used to normalize each date field.
|
||||
*
|
||||
* @return the field to {@link Resolution} map
|
||||
*/
|
||||
public Map<CharSequence, DateTools.Resolution> getDateResolutionMap() {
|
||||
return getQueryConfigHandler().get(ConfigurationKeys.FIELD_DATE_RESOLUTION_MAP);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the {@link Resolution} used for each field
|
||||
*
|
||||
* @param dateRes a collection that maps a field to its {@link Resolution}
|
||||
*/
|
||||
public void setDateResolutionMap(Map<CharSequence, DateTools.Resolution> dateRes) {
|
||||
getQueryConfigHandler().set(ConfigurationKeys.FIELD_DATE_RESOLUTION_MAP, dateRes);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -20,8 +20,8 @@ package org.apache.lucene.queryParser.standard.builders;
|
|||
import org.apache.lucene.index.Term;
|
||||
import org.apache.lucene.queryParser.core.QueryNodeException;
|
||||
import org.apache.lucene.queryParser.core.nodes.QueryNode;
|
||||
import org.apache.lucene.queryParser.standard.config.MultiTermRewriteMethodAttribute;
|
||||
import org.apache.lucene.queryParser.standard.nodes.PrefixWildcardQueryNode;
|
||||
import org.apache.lucene.queryParser.standard.processors.MultiTermRewriteMethodProcessor;
|
||||
import org.apache.lucene.search.MultiTermQuery;
|
||||
import org.apache.lucene.search.PrefixQuery;
|
||||
|
||||
|
@ -42,7 +42,7 @@ public class PrefixWildcardQueryNodeBuilder implements StandardQueryBuilder {
|
|||
String text = wildcardNode.getText().subSequence(0, wildcardNode.getText().length() - 1).toString();
|
||||
PrefixQuery q = new PrefixQuery(new Term(wildcardNode.getFieldAsString(), text));
|
||||
|
||||
MultiTermQuery.RewriteMethod method = (MultiTermQuery.RewriteMethod)queryNode.getTag(MultiTermRewriteMethodAttribute.TAG_ID);
|
||||
MultiTermQuery.RewriteMethod method = (MultiTermQuery.RewriteMethod)queryNode.getTag(MultiTermRewriteMethodProcessor.TAG_ID);
|
||||
if (method != null) {
|
||||
q.setRewriteMethod(method);
|
||||
}
|
||||
|
|
|
@ -21,8 +21,8 @@ import org.apache.lucene.queryParser.core.QueryNodeException;
|
|||
import org.apache.lucene.queryParser.core.nodes.ParametricQueryNode;
|
||||
import org.apache.lucene.queryParser.core.nodes.QueryNode;
|
||||
import org.apache.lucene.queryParser.core.nodes.ParametricQueryNode.CompareOperator;
|
||||
import org.apache.lucene.queryParser.standard.config.MultiTermRewriteMethodAttribute;
|
||||
import org.apache.lucene.queryParser.standard.nodes.RangeQueryNode;
|
||||
import org.apache.lucene.queryParser.standard.processors.MultiTermRewriteMethodProcessor;
|
||||
import org.apache.lucene.search.MultiTermQuery;
|
||||
import org.apache.lucene.search.TermRangeQuery;
|
||||
|
||||
|
@ -55,7 +55,7 @@ public class RangeQueryNodeBuilder implements StandardQueryBuilder {
|
|||
|
||||
TermRangeQuery rangeQuery = TermRangeQuery.newStringRange(field, lower.getTextAsString(), upper.getTextAsString(), lowerInclusive, upperInclusive);
|
||||
|
||||
MultiTermQuery.RewriteMethod method = (MultiTermQuery.RewriteMethod)queryNode.getTag(MultiTermRewriteMethodAttribute.TAG_ID);
|
||||
MultiTermQuery.RewriteMethod method = (MultiTermQuery.RewriteMethod)queryNode.getTag(MultiTermRewriteMethodProcessor.TAG_ID);
|
||||
if (method != null) {
|
||||
rangeQuery.setRewriteMethod(method);
|
||||
}
|
||||
|
|
|
@ -20,8 +20,8 @@ package org.apache.lucene.queryParser.standard.builders;
|
|||
import org.apache.lucene.index.Term;
|
||||
import org.apache.lucene.queryParser.core.QueryNodeException;
|
||||
import org.apache.lucene.queryParser.core.nodes.QueryNode;
|
||||
import org.apache.lucene.queryParser.standard.config.MultiTermRewriteMethodAttribute;
|
||||
import org.apache.lucene.queryParser.standard.nodes.RegexpQueryNode;
|
||||
import org.apache.lucene.queryParser.standard.processors.MultiTermRewriteMethodProcessor;
|
||||
import org.apache.lucene.search.MultiTermQuery;
|
||||
import org.apache.lucene.search.RegexpQuery;
|
||||
|
||||
|
@ -41,7 +41,7 @@ public class RegexpQueryNodeBuilder implements StandardQueryBuilder {
|
|||
regexpNode.textToBytesRef()));
|
||||
|
||||
MultiTermQuery.RewriteMethod method = (MultiTermQuery.RewriteMethod) queryNode
|
||||
.getTag(MultiTermRewriteMethodAttribute.TAG_ID);
|
||||
.getTag(MultiTermRewriteMethodProcessor.TAG_ID);
|
||||
if (method != null) {
|
||||
q.setRewriteMethod(method);
|
||||
}
|
||||
|
|
|
@ -20,8 +20,8 @@ package org.apache.lucene.queryParser.standard.builders;
|
|||
import org.apache.lucene.index.Term;
|
||||
import org.apache.lucene.queryParser.core.QueryNodeException;
|
||||
import org.apache.lucene.queryParser.core.nodes.QueryNode;
|
||||
import org.apache.lucene.queryParser.standard.config.MultiTermRewriteMethodAttribute;
|
||||
import org.apache.lucene.queryParser.standard.nodes.WildcardQueryNode;
|
||||
import org.apache.lucene.queryParser.standard.processors.MultiTermRewriteMethodProcessor;
|
||||
import org.apache.lucene.search.MultiTermQuery;
|
||||
import org.apache.lucene.search.WildcardQuery;
|
||||
|
||||
|
@ -41,7 +41,7 @@ public class WildcardQueryNodeBuilder implements StandardQueryBuilder {
|
|||
WildcardQuery q = new WildcardQuery(new Term(wildcardNode.getFieldAsString(),
|
||||
wildcardNode.getTextAsString()));
|
||||
|
||||
MultiTermQuery.RewriteMethod method = (MultiTermQuery.RewriteMethod)queryNode.getTag(MultiTermRewriteMethodAttribute.TAG_ID);
|
||||
MultiTermQuery.RewriteMethod method = (MultiTermQuery.RewriteMethod)queryNode.getTag(MultiTermRewriteMethodProcessor.TAG_ID);
|
||||
if (method != null) {
|
||||
q.setRewriteMethod(method);
|
||||
}
|
||||
|
|
|
@ -1,79 +0,0 @@
|
|||
package org.apache.lucene.queryParser.standard.config;
|
||||
|
||||
/**
|
||||
* 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.queryParser.core.config.QueryConfigHandler;
|
||||
import org.apache.lucene.queryParser.standard.processors.AllowLeadingWildcardProcessor;
|
||||
import org.apache.lucene.util.AttributeImpl;
|
||||
|
||||
/**
|
||||
* This attribute is used by {@link AllowLeadingWildcardProcessor} processor and
|
||||
* must be defined in the {@link QueryConfigHandler}. It basically tells the
|
||||
* processor if it should allow leading wildcard. <br/>
|
||||
*
|
||||
* @see org.apache.lucene.queryParser.standard.config.AllowLeadingWildcardAttribute
|
||||
*/
|
||||
public class AllowLeadingWildcardAttributeImpl extends AttributeImpl
|
||||
implements AllowLeadingWildcardAttribute {
|
||||
|
||||
private boolean allowLeadingWildcard = false; // default in 2.9
|
||||
|
||||
public void setAllowLeadingWildcard(boolean allowLeadingWildcard) {
|
||||
this.allowLeadingWildcard = allowLeadingWildcard;
|
||||
}
|
||||
|
||||
public boolean isAllowLeadingWildcard() {
|
||||
return this.allowLeadingWildcard;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clear() {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void copyTo(AttributeImpl target) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object other) {
|
||||
|
||||
if (other instanceof AllowLeadingWildcardAttributeImpl
|
||||
&& ((AllowLeadingWildcardAttributeImpl) other).allowLeadingWildcard == this.allowLeadingWildcard) {
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return this.allowLeadingWildcard ? -1 : Integer.MAX_VALUE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "<allowLeadingWildcard allowLeadingWildcard="
|
||||
+ this.allowLeadingWildcard + "/>";
|
||||
}
|
||||
|
||||
}
|
|
@ -1,35 +0,0 @@
|
|||
package org.apache.lucene.queryParser.standard.config;
|
||||
|
||||
/**
|
||||
* 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.analysis.Analyzer;
|
||||
import org.apache.lucene.queryParser.core.config.QueryConfigHandler;
|
||||
import org.apache.lucene.queryParser.standard.processors.AnalyzerQueryNodeProcessor;
|
||||
import org.apache.lucene.util.Attribute;
|
||||
|
||||
/**
|
||||
* This attribute is used by {@link AnalyzerQueryNodeProcessor} processor and
|
||||
* must be defined in the {@link QueryConfigHandler}. It provides to this
|
||||
* processor the {@link Analyzer}, if there is one, which will be used to
|
||||
* analyze the query terms. <br/>
|
||||
*
|
||||
*/
|
||||
public interface AnalyzerAttribute extends Attribute {
|
||||
public void setAnalyzer(Analyzer analyzer);
|
||||
public Analyzer getAnalyzer();
|
||||
}
|
|
@ -1,90 +0,0 @@
|
|||
package org.apache.lucene.queryParser.standard.config;
|
||||
|
||||
/**
|
||||
* 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.analysis.Analyzer;
|
||||
import org.apache.lucene.queryParser.core.config.QueryConfigHandler;
|
||||
import org.apache.lucene.queryParser.standard.processors.AnalyzerQueryNodeProcessor;
|
||||
import org.apache.lucene.util.AttributeImpl;
|
||||
|
||||
/**
|
||||
* This attribute is used by {@link AnalyzerQueryNodeProcessor} processor and
|
||||
* must be defined in the {@link QueryConfigHandler}. It provides to this
|
||||
* processor the {@link Analyzer}, if there is one, which will be used to
|
||||
* analyze the query terms. <br/>
|
||||
*
|
||||
* @see org.apache.lucene.queryParser.standard.config.AnalyzerAttribute
|
||||
*/
|
||||
public class AnalyzerAttributeImpl extends AttributeImpl
|
||||
implements AnalyzerAttribute {
|
||||
|
||||
private Analyzer analyzer;
|
||||
|
||||
public AnalyzerAttributeImpl() {
|
||||
analyzer = null; //default value 2.4
|
||||
}
|
||||
|
||||
public void setAnalyzer(Analyzer analyzer) {
|
||||
this.analyzer = analyzer;
|
||||
}
|
||||
|
||||
public Analyzer getAnalyzer() {
|
||||
return this.analyzer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clear() {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void copyTo(AttributeImpl target) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object other) {
|
||||
|
||||
if (other instanceof AnalyzerAttributeImpl) {
|
||||
AnalyzerAttributeImpl analyzerAttr = (AnalyzerAttributeImpl) other;
|
||||
|
||||
if (analyzerAttr.analyzer == this.analyzer
|
||||
|| (this.analyzer != null && analyzerAttr.analyzer != null && this.analyzer
|
||||
.equals(analyzerAttr.analyzer))) {
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return (this.analyzer == null) ? 0 : this.analyzer.hashCode();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "<analyzerAttribute analyzer='" + this.analyzer + "'/>";
|
||||
}
|
||||
|
||||
}
|
|
@ -1,84 +0,0 @@
|
|||
package org.apache.lucene.queryParser.standard.config;
|
||||
|
||||
/**
|
||||
* 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.queryParser.core.config.FieldConfig;
|
||||
import org.apache.lucene.queryParser.standard.processors.MultiFieldQueryNodeProcessor;
|
||||
import org.apache.lucene.util.AttributeImpl;
|
||||
|
||||
/**
|
||||
* This attribute is used by {@link MultiFieldQueryNodeProcessor} processor and
|
||||
* it should be defined in a {@link FieldConfig}. This processor uses this
|
||||
* attribute to define which boost a specific field should have when none is
|
||||
* defined to it. <br/>
|
||||
* <br/>
|
||||
*
|
||||
* @see org.apache.lucene.queryParser.standard.config.BoostAttribute
|
||||
*/
|
||||
public class BoostAttributeImpl extends AttributeImpl
|
||||
implements BoostAttribute {
|
||||
|
||||
private float boost = 1.0f;
|
||||
|
||||
public BoostAttributeImpl() {
|
||||
// empty constructor
|
||||
}
|
||||
|
||||
public void setBoost(float boost) {
|
||||
this.boost = boost;
|
||||
}
|
||||
|
||||
public float getBoost() {
|
||||
return this.boost;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clear() {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void copyTo(AttributeImpl target) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object other) {
|
||||
|
||||
if (other instanceof BoostAttributeImpl
|
||||
&& ((BoostAttributeImpl) other).boost == this.boost) {
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Float.valueOf(this.boost).hashCode();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "<boostAttribute boost=" + this.boost + "/>";
|
||||
}
|
||||
|
||||
}
|
|
@ -1,43 +0,0 @@
|
|||
package org.apache.lucene.queryParser.standard.config;
|
||||
|
||||
/**
|
||||
* 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.document.DateTools;
|
||||
import org.apache.lucene.document.DateTools.Resolution;
|
||||
import org.apache.lucene.queryParser.core.config.QueryConfigHandler;
|
||||
import org.apache.lucene.queryParser.standard.nodes.RangeQueryNode;
|
||||
import org.apache.lucene.queryParser.standard.processors.ParametricRangeQueryNodeProcessor;
|
||||
import org.apache.lucene.util.Attribute;
|
||||
|
||||
/**
|
||||
* This attribute is used by {@link ParametricRangeQueryNodeProcessor} processor
|
||||
* and must be defined in the {@link QueryConfigHandler}. This attribute tells
|
||||
* the processor which {@link Resolution} to use when parsing the date. <br/>
|
||||
*
|
||||
*/
|
||||
public interface DateResolutionAttribute extends Attribute {
|
||||
/**
|
||||
* Sets the default date resolution used by {@link RangeQueryNode}s for
|
||||
* fields for which no specific date resolutions has been set. Field
|
||||
* specific resolutions can be set with
|
||||
*
|
||||
* @param dateResolution the default date resolution to set
|
||||
*/
|
||||
public void setDateResolution(DateTools.Resolution dateResolution);
|
||||
public DateTools.Resolution getDateResolution();
|
||||
}
|
|
@ -1,90 +0,0 @@
|
|||
package org.apache.lucene.queryParser.standard.config;
|
||||
|
||||
/**
|
||||
* 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.document.DateTools;
|
||||
import org.apache.lucene.document.DateTools.Resolution;
|
||||
import org.apache.lucene.queryParser.core.config.QueryConfigHandler;
|
||||
import org.apache.lucene.queryParser.standard.processors.ParametricRangeQueryNodeProcessor;
|
||||
import org.apache.lucene.util.AttributeImpl;
|
||||
|
||||
/**
|
||||
* This attribute is used by {@link ParametricRangeQueryNodeProcessor} processor
|
||||
* and must be defined in the {@link QueryConfigHandler}. This attribute tells
|
||||
* the processor which {@link Resolution} to use when parsing the date. <br/>
|
||||
*
|
||||
* @see org.apache.lucene.queryParser.standard.config.DateResolutionAttribute
|
||||
*/
|
||||
public class DateResolutionAttributeImpl extends AttributeImpl
|
||||
implements DateResolutionAttribute {
|
||||
|
||||
private DateTools.Resolution dateResolution = null;
|
||||
|
||||
public DateResolutionAttributeImpl() {
|
||||
dateResolution = null; //default in 2.4
|
||||
}
|
||||
|
||||
public void setDateResolution(DateTools.Resolution dateResolution) {
|
||||
this.dateResolution = dateResolution;
|
||||
}
|
||||
|
||||
public DateTools.Resolution getDateResolution() {
|
||||
return this.dateResolution;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clear() {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void copyTo(AttributeImpl target) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object other) {
|
||||
|
||||
if (other instanceof DateResolutionAttributeImpl) {
|
||||
DateResolutionAttributeImpl dateResAttr = (DateResolutionAttributeImpl) other;
|
||||
|
||||
if (dateResAttr.getDateResolution() == getDateResolution()
|
||||
|| dateResAttr.getDateResolution().equals(getDateResolution())) {
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return (this.dateResolution == null) ? 0 : this.dateResolution.hashCode();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "<dateResolutionAttribute dateResolution='" + this.dateResolution
|
||||
+ "'/>";
|
||||
}
|
||||
|
||||
}
|
|
@ -1,92 +0,0 @@
|
|||
package org.apache.lucene.queryParser.standard.config;
|
||||
|
||||
/**
|
||||
* 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.queryParser.core.config.QueryConfigHandler;
|
||||
import org.apache.lucene.queryParser.standard.processors.GroupQueryNodeProcessor;
|
||||
import org.apache.lucene.util.AttributeImpl;
|
||||
|
||||
/**
|
||||
* This attribute is used by {@link GroupQueryNodeProcessor} processor and must
|
||||
* be defined in the {@link QueryConfigHandler}. This attribute tells the
|
||||
* processor which is the default boolean operator when no operator is defined
|
||||
* between terms. <br/>
|
||||
*
|
||||
* @see org.apache.lucene.queryParser.standard.config.DefaultOperatorAttribute
|
||||
*/
|
||||
public class DefaultOperatorAttributeImpl extends AttributeImpl
|
||||
implements DefaultOperatorAttribute {
|
||||
|
||||
private Operator operator = Operator.OR;
|
||||
|
||||
public DefaultOperatorAttributeImpl() {
|
||||
// empty constructor
|
||||
}
|
||||
|
||||
public void setOperator(Operator operator) {
|
||||
|
||||
if (operator == null) {
|
||||
throw new IllegalArgumentException("default operator cannot be null!");
|
||||
}
|
||||
|
||||
this.operator = operator;
|
||||
|
||||
}
|
||||
|
||||
public Operator getOperator() {
|
||||
return this.operator;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clear() {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void copyTo(AttributeImpl target) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object other) {
|
||||
|
||||
if (other instanceof DefaultOperatorAttributeImpl) {
|
||||
DefaultOperatorAttributeImpl defaultOperatorAttr = (DefaultOperatorAttributeImpl) other;
|
||||
|
||||
if (defaultOperatorAttr.getOperator() == this.getOperator()) {
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return getOperator().hashCode() * 31;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "<defaultOperatorAttribute operator=" + this.operator.name() + "/>";
|
||||
}
|
||||
|
||||
}
|
|
@ -1,84 +0,0 @@
|
|||
package org.apache.lucene.queryParser.standard.config;
|
||||
|
||||
/**
|
||||
* 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.queryParser.core.config.QueryConfigHandler;
|
||||
import org.apache.lucene.queryParser.standard.processors.PhraseSlopQueryNodeProcessor;
|
||||
import org.apache.lucene.util.AttributeImpl;
|
||||
|
||||
/**
|
||||
* This attribute is used by {@link PhraseSlopQueryNodeProcessor} processor and
|
||||
* must be defined in the {@link QueryConfigHandler}. This attribute tells the
|
||||
* processor what is the default phrase slop when no slop is defined in a
|
||||
* phrase. <br/>
|
||||
*
|
||||
* @see org.apache.lucene.queryParser.standard.config.DefaultOperatorAttribute
|
||||
*/
|
||||
public class DefaultPhraseSlopAttributeImpl extends AttributeImpl
|
||||
implements DefaultPhraseSlopAttribute {
|
||||
|
||||
private int defaultPhraseSlop = 0;
|
||||
|
||||
public DefaultPhraseSlopAttributeImpl() {
|
||||
defaultPhraseSlop = 0; //default value in 2.4
|
||||
}
|
||||
|
||||
public void setDefaultPhraseSlop(int defaultPhraseSlop) {
|
||||
this.defaultPhraseSlop = defaultPhraseSlop;
|
||||
}
|
||||
|
||||
public int getDefaultPhraseSlop() {
|
||||
return this.defaultPhraseSlop;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clear() {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void copyTo(AttributeImpl target) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object other) {
|
||||
|
||||
if (other instanceof DefaultPhraseSlopAttributeImpl
|
||||
&& ((DefaultPhraseSlopAttributeImpl) other).defaultPhraseSlop == this.defaultPhraseSlop) {
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Integer.valueOf(this.defaultPhraseSlop).hashCode();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "<defaultPhraseSlop defaultPhraseSlop=" + this.defaultPhraseSlop
|
||||
+ "/>";
|
||||
}
|
||||
|
||||
}
|
|
@ -1,92 +0,0 @@
|
|||
package org.apache.lucene.queryParser.standard.config;
|
||||
|
||||
/**
|
||||
* 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.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.apache.lucene.queryParser.core.config.FieldConfig;
|
||||
import org.apache.lucene.queryParser.standard.processors.MultiFieldQueryNodeProcessor;
|
||||
import org.apache.lucene.util.AttributeImpl;
|
||||
|
||||
/**
|
||||
* This attribute is used by {@link MultiFieldQueryNodeProcessor} processor and
|
||||
* it should be defined in a {@link FieldConfig}. This processor uses this
|
||||
* attribute to define which boost a specific field should have when none is
|
||||
* defined to it. <br/>
|
||||
* <br/>
|
||||
*
|
||||
* @see org.apache.lucene.queryParser.standard.config.BoostAttribute
|
||||
*/
|
||||
public class FieldBoostMapAttributeImpl extends AttributeImpl
|
||||
implements FieldBoostMapAttribute {
|
||||
|
||||
private Map<String, Float> boosts = new LinkedHashMap<String, Float>();
|
||||
|
||||
|
||||
public FieldBoostMapAttributeImpl() {
|
||||
// empty constructor
|
||||
}
|
||||
|
||||
public void setFieldBoostMap(Map<String, Float> boosts) {
|
||||
this.boosts = boosts;
|
||||
}
|
||||
|
||||
public Map<String, Float> getFieldBoostMap() {
|
||||
return this.boosts;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clear() {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void copyTo(AttributeImpl target) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object other) {
|
||||
|
||||
if (other instanceof FieldBoostMapAttributeImpl
|
||||
&& ((FieldBoostMapAttributeImpl) other).boosts.equals(this.boosts) ) {
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
final int prime = 97;
|
||||
if (this.boosts != null)
|
||||
return this.boosts.hashCode() * prime;
|
||||
else
|
||||
return Float.valueOf(prime).hashCode();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "<fieldBoostMapAttribute map=" + this.boosts + "/>";
|
||||
}
|
||||
|
||||
}
|
|
@ -17,18 +17,21 @@ package org.apache.lucene.queryParser.standard.config;
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import org.apache.lucene.queryParser.core.config.FieldConfig;
|
||||
import org.apache.lucene.queryParser.core.config.FieldConfigListener;
|
||||
import org.apache.lucene.queryParser.core.config.QueryConfigHandler;
|
||||
import org.apache.lucene.queryParser.standard.config.StandardQueryConfigHandler.ConfigurationKeys;
|
||||
|
||||
/**
|
||||
* This listener listens for every field configuration request and assign a
|
||||
* {@link BoostAttribute} to the equivalent {@link FieldConfig} based on a
|
||||
* defined map: fieldName -> boostValue store in {@link FieldBoostMapAttribute}
|
||||
* in the {@link FieldBoostMapAttribute}.
|
||||
* {@link ConfigurationKeys#BOOST} to the
|
||||
* equivalent {@link FieldConfig} based on a defined map: fieldName -> boostValue stored in
|
||||
* {@link ConfigurationKeys#FIELD_BOOST_MAP}.
|
||||
*
|
||||
* @see BoostAttribute
|
||||
* @see FieldBoostMapAttribute
|
||||
* @see ConfigurationKeys#FIELD_BOOST_MAP
|
||||
* @see ConfigurationKeys#BOOST
|
||||
* @see FieldConfig
|
||||
* @see FieldConfigListener
|
||||
*/
|
||||
|
@ -40,15 +43,14 @@ public class FieldBoostMapFCListener implements FieldConfigListener {
|
|||
this.config = config;
|
||||
}
|
||||
|
||||
public void buildFieldConfig(FieldConfig fieldConfig) {
|
||||
if (this.config.hasAttribute(FieldBoostMapAttribute.class)) {
|
||||
FieldBoostMapAttribute fieldBoostMapAttr = this.config.getAttribute(FieldBoostMapAttribute.class);
|
||||
BoostAttribute boostAttr = fieldConfig.addAttribute(BoostAttribute.class);
|
||||
|
||||
Float boost = fieldBoostMapAttr.getFieldBoostMap().get(fieldConfig.getField());
|
||||
public void buildFieldConfig(FieldConfig fieldConfig) {
|
||||
Map<String, Float> fieldBoostMap = this.config.get(ConfigurationKeys.FIELD_BOOST_MAP);
|
||||
|
||||
if (fieldBoostMap != null) {
|
||||
Float boost = fieldBoostMap.get(fieldConfig.getField());
|
||||
|
||||
if (boost != null) {
|
||||
boostAttr.setBoost(boost.floatValue());
|
||||
fieldConfig.set(ConfigurationKeys.BOOST, boost);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -17,20 +17,23 @@ package org.apache.lucene.queryParser.standard.config;
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import org.apache.lucene.document.DateTools;
|
||||
import org.apache.lucene.document.DateTools.Resolution;
|
||||
import org.apache.lucene.queryParser.core.config.FieldConfig;
|
||||
import org.apache.lucene.queryParser.core.config.FieldConfigListener;
|
||||
import org.apache.lucene.queryParser.core.config.QueryConfigHandler;
|
||||
import org.apache.lucene.queryParser.standard.config.StandardQueryConfigHandler.ConfigurationKeys;
|
||||
|
||||
/**
|
||||
* This listener listens for every field configuration request and assign a
|
||||
* {@link DateResolutionAttribute} to the equivalent {@link FieldConfig} based
|
||||
* on a defined map: fieldName -> DateTools.Resolution stored in
|
||||
* {@link FieldDateResolutionMapAttribute} in the
|
||||
* {@link DateResolutionAttribute}.
|
||||
* {@link ConfigurationKeys#DATE_RESOLUTION} to the equivalent {@link FieldConfig} based
|
||||
* on a defined map: fieldName -> {@link Resolution} stored in
|
||||
* {@link ConfigurationKeys#FIELD_DATE_RESOLUTION_MAP}.
|
||||
*
|
||||
* @see DateResolutionAttribute
|
||||
* @see FieldDateResolutionMapAttribute
|
||||
* @see ConfigurationKeys#DATE_RESOLUTION
|
||||
* @see ConfigurationKeys#FIELD_DATE_RESOLUTION_MAP
|
||||
* @see FieldConfig
|
||||
* @see FieldConfigListener
|
||||
*/
|
||||
|
@ -43,29 +46,21 @@ public class FieldDateResolutionFCListener implements FieldConfigListener {
|
|||
}
|
||||
|
||||
public void buildFieldConfig(FieldConfig fieldConfig) {
|
||||
DateResolutionAttribute fieldDateResAttr = fieldConfig
|
||||
.addAttribute(DateResolutionAttribute.class);
|
||||
DateTools.Resolution dateRes = null;
|
||||
Map<CharSequence, DateTools.Resolution> dateResMap = this.config.get(ConfigurationKeys.FIELD_DATE_RESOLUTION_MAP);
|
||||
|
||||
if (this.config.hasAttribute(FieldDateResolutionMapAttribute.class)) {
|
||||
FieldDateResolutionMapAttribute dateResMapAttr = this.config
|
||||
.addAttribute(FieldDateResolutionMapAttribute.class);
|
||||
dateRes = dateResMapAttr.getFieldDateResolutionMap().get(
|
||||
if (dateResMap != null) {
|
||||
dateRes = dateResMap.get(
|
||||
fieldConfig.getField());
|
||||
}
|
||||
|
||||
if (dateRes == null) {
|
||||
|
||||
if (this.config.hasAttribute(DateResolutionAttribute.class)) {
|
||||
DateResolutionAttribute dateResAttr = this.config
|
||||
.addAttribute(DateResolutionAttribute.class);
|
||||
dateRes = dateResAttr.getDateResolution();
|
||||
|
||||
}
|
||||
|
||||
dateRes = this.config.get(ConfigurationKeys.DATE_RESOLUTION);
|
||||
}
|
||||
|
||||
fieldDateResAttr.setDateResolution(dateRes);
|
||||
if (dateRes != null) {
|
||||
fieldConfig.set(ConfigurationKeys.DATE_RESOLUTION, dateRes);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -1,89 +0,0 @@
|
|||
package org.apache.lucene.queryParser.standard.config;
|
||||
|
||||
/**
|
||||
* 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.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.apache.lucene.document.DateTools;
|
||||
import org.apache.lucene.document.DateTools.Resolution;
|
||||
import org.apache.lucene.util.AttributeImpl;
|
||||
|
||||
/**
|
||||
* This attribute enables the user to define a default DateResolution per field.
|
||||
* it's used by {@link FieldDateResolutionFCListener#buildFieldConfig(org.apache.lucene.queryParser.core.config.FieldConfig)}
|
||||
*
|
||||
* @see FieldDateResolutionMapAttribute
|
||||
*/
|
||||
public class FieldDateResolutionMapAttributeImpl extends AttributeImpl
|
||||
implements FieldDateResolutionMapAttribute {
|
||||
|
||||
private Map<CharSequence, DateTools.Resolution> dateRes = new HashMap<CharSequence, DateTools.Resolution>();
|
||||
|
||||
|
||||
public FieldDateResolutionMapAttributeImpl() {
|
||||
// empty constructor
|
||||
}
|
||||
|
||||
public void setFieldDateResolutionMap(Map<CharSequence, DateTools.Resolution> dateRes) {
|
||||
this.dateRes = dateRes;
|
||||
}
|
||||
|
||||
public Map<CharSequence, Resolution> getFieldDateResolutionMap() {
|
||||
return this.dateRes;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clear() {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void copyTo(AttributeImpl target) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object other) {
|
||||
|
||||
if (other instanceof FieldDateResolutionMapAttributeImpl
|
||||
&& ((FieldDateResolutionMapAttributeImpl) other).dateRes.equals(this.dateRes) ) {
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
final int prime = 97;
|
||||
if (this.dateRes != null)
|
||||
return this.dateRes.hashCode() * prime;
|
||||
else
|
||||
return Float.valueOf(prime).hashCode();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "<fieldDateResolutionMapAttribute map=" + this.dateRes + "/>";
|
||||
}
|
||||
|
||||
}
|
|
@ -1,36 +0,0 @@
|
|||
package org.apache.lucene.queryParser.standard.config;
|
||||
|
||||
/**
|
||||
* 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.queryParser.core.config.QueryConfigHandler;
|
||||
import org.apache.lucene.queryParser.standard.processors.PhraseSlopQueryNodeProcessor;
|
||||
import org.apache.lucene.util.Attribute;
|
||||
|
||||
/**
|
||||
* This attribute is used by {@link PhraseSlopQueryNodeProcessor} processor and
|
||||
* must be defined in the {@link QueryConfigHandler}. This attribute tells the
|
||||
* processor what is the default phrase slop when no slop is defined in a
|
||||
* phrase. <br/>
|
||||
*
|
||||
*/
|
||||
public interface FuzzyAttribute extends Attribute {
|
||||
public void setPrefixLength(int prefixLength);
|
||||
public int getPrefixLength();
|
||||
public void setFuzzyMinSimilarity(float minSimilarity);
|
||||
public float getFuzzyMinSimilarity();
|
||||
}
|
|
@ -1,94 +0,0 @@
|
|||
package org.apache.lucene.queryParser.standard.config;
|
||||
|
||||
/**
|
||||
* 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.queryParser.core.config.QueryConfigHandler;
|
||||
import org.apache.lucene.queryParser.standard.processors.PhraseSlopQueryNodeProcessor;
|
||||
import org.apache.lucene.search.FuzzyQuery;
|
||||
import org.apache.lucene.util.AttributeImpl;
|
||||
|
||||
/**
|
||||
* This attribute is used by {@link PhraseSlopQueryNodeProcessor} processor and
|
||||
* must be defined in the {@link QueryConfigHandler}. This attribute tells the
|
||||
* processor what is the default phrase slop when no slop is defined in a
|
||||
* phrase. <br/>
|
||||
*
|
||||
* @see org.apache.lucene.queryParser.standard.config.FuzzyAttribute
|
||||
*/
|
||||
public class FuzzyAttributeImpl extends AttributeImpl
|
||||
implements FuzzyAttribute {
|
||||
|
||||
private int prefixLength = FuzzyQuery.defaultPrefixLength;
|
||||
|
||||
private float minSimilarity = FuzzyQuery.defaultMinSimilarity;
|
||||
|
||||
public FuzzyAttributeImpl() {
|
||||
// empty constructor
|
||||
}
|
||||
|
||||
public void setPrefixLength(int prefixLength) {
|
||||
this.prefixLength = prefixLength;
|
||||
}
|
||||
|
||||
public int getPrefixLength() {
|
||||
return this.prefixLength;
|
||||
}
|
||||
|
||||
public void setFuzzyMinSimilarity(float minSimilarity) {
|
||||
this.minSimilarity = minSimilarity;
|
||||
}
|
||||
|
||||
public float getFuzzyMinSimilarity() {
|
||||
return this.minSimilarity;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clear() {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void copyTo(AttributeImpl target) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object other) {
|
||||
|
||||
if (other instanceof FuzzyAttributeImpl
|
||||
&& ((FuzzyAttributeImpl) other).prefixLength == this.prefixLength) {
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Integer.valueOf(this.prefixLength).hashCode();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "<fuzzyAttribute prefixLength=" + this.prefixLength + "/>";
|
||||
}
|
||||
|
||||
}
|
|
@ -17,19 +17,30 @@ package org.apache.lucene.queryParser.standard.config;
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import java.util.Map;
|
||||
import org.apache.lucene.search.FuzzyQuery;
|
||||
|
||||
import org.apache.lucene.queryParser.core.config.FieldConfig;
|
||||
import org.apache.lucene.util.Attribute;
|
||||
public class FuzzyConfig {
|
||||
|
||||
private int prefixLength = FuzzyQuery.defaultPrefixLength;
|
||||
|
||||
/**
|
||||
* This attribute enables the user to define a default boost per field.
|
||||
* it's used by {@link FieldBoostMapFCListener#buildFieldConfig(FieldConfig)}
|
||||
*/
|
||||
public interface FieldBoostMapAttribute extends Attribute {
|
||||
/**
|
||||
* @param boosts a mapping from field name to its default boost
|
||||
*/
|
||||
public void setFieldBoostMap(Map<String, Float> boosts);
|
||||
public Map<String, Float> getFieldBoostMap();
|
||||
private float minSimilarity = FuzzyQuery.defaultMinSimilarity;
|
||||
|
||||
public FuzzyConfig() {}
|
||||
|
||||
public int getPrefixLength() {
|
||||
return prefixLength;
|
||||
}
|
||||
|
||||
public void setPrefixLength(int prefixLength) {
|
||||
this.prefixLength = prefixLength;
|
||||
}
|
||||
|
||||
public float getMinSimilarity() {
|
||||
return minSimilarity;
|
||||
}
|
||||
|
||||
public void setMinSimilarity(float minSimilarity) {
|
||||
this.minSimilarity = minSimilarity;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,90 +0,0 @@
|
|||
package org.apache.lucene.queryParser.standard.config;
|
||||
|
||||
/**
|
||||
* 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.util.Locale;
|
||||
|
||||
import org.apache.lucene.queryParser.core.config.QueryConfigHandler;
|
||||
import org.apache.lucene.queryParser.standard.processors.ParametricRangeQueryNodeProcessor;
|
||||
import org.apache.lucene.util.AttributeImpl;
|
||||
|
||||
/**
|
||||
* This attribute is used by processor {@link ParametricRangeQueryNodeProcessor}
|
||||
* and must be defined in the {@link QueryConfigHandler}. This attribute tells
|
||||
* the processor what is the default {@link Locale} used to parse a date. <br/>
|
||||
*
|
||||
* @see org.apache.lucene.queryParser.standard.config.LocaleAttribute
|
||||
*/
|
||||
public class LocaleAttributeImpl extends AttributeImpl
|
||||
implements LocaleAttribute {
|
||||
|
||||
private Locale locale = Locale.getDefault();
|
||||
|
||||
public LocaleAttributeImpl() {
|
||||
locale = Locale.getDefault(); //default in 2.4
|
||||
}
|
||||
|
||||
public void setLocale(Locale locale) {
|
||||
this.locale = locale;
|
||||
}
|
||||
|
||||
public Locale getLocale() {
|
||||
return this.locale;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clear() {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void copyTo(AttributeImpl target) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object other) {
|
||||
|
||||
if (other instanceof LocaleAttributeImpl) {
|
||||
LocaleAttributeImpl localeAttr = (LocaleAttributeImpl) other;
|
||||
|
||||
if (localeAttr.locale == this.locale
|
||||
|| (this.locale != null && localeAttr.locale != null && this.locale
|
||||
.equals(localeAttr.locale))) {
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return (this.locale == null) ? 0 : this.locale.hashCode();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "<localeAttribute locale=" + this.locale + "/>";
|
||||
}
|
||||
|
||||
}
|
|
@ -1,85 +0,0 @@
|
|||
package org.apache.lucene.queryParser.standard.config;
|
||||
|
||||
/**
|
||||
* 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.util.Locale;
|
||||
|
||||
import org.apache.lucene.queryParser.core.config.QueryConfigHandler;
|
||||
import org.apache.lucene.queryParser.standard.processors.ParametricRangeQueryNodeProcessor;
|
||||
import org.apache.lucene.util.AttributeImpl;
|
||||
|
||||
/**
|
||||
* This attribute is used by processor {@link ParametricRangeQueryNodeProcessor}
|
||||
* and must be defined in the {@link QueryConfigHandler}. This attribute tells
|
||||
* the processor what is the default {@link Locale} used to parse a date. <br/>
|
||||
*
|
||||
* @see org.apache.lucene.queryParser.standard.config.LowercaseExpandedTermsAttribute
|
||||
*/
|
||||
public class LowercaseExpandedTermsAttributeImpl extends AttributeImpl
|
||||
implements LowercaseExpandedTermsAttribute {
|
||||
|
||||
private boolean lowercaseExpandedTerms = true;
|
||||
|
||||
public LowercaseExpandedTermsAttributeImpl() {
|
||||
lowercaseExpandedTerms = true; // default in 2.4
|
||||
}
|
||||
|
||||
public void setLowercaseExpandedTerms(boolean lowercaseExpandedTerms) {
|
||||
this.lowercaseExpandedTerms = lowercaseExpandedTerms;
|
||||
}
|
||||
|
||||
public boolean isLowercaseExpandedTerms() {
|
||||
return this.lowercaseExpandedTerms;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clear() {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void copyTo(AttributeImpl target) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object other) {
|
||||
|
||||
if (other instanceof LowercaseExpandedTermsAttributeImpl
|
||||
&& ((LowercaseExpandedTermsAttributeImpl) other).lowercaseExpandedTerms == this.lowercaseExpandedTerms) {
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return this.lowercaseExpandedTerms ? -1 : Integer.MAX_VALUE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "<lowercaseExpandedTerms lowercaseExpandedTerms="
|
||||
+ this.lowercaseExpandedTerms + "/>";
|
||||
}
|
||||
|
||||
}
|
|
@ -1,84 +0,0 @@
|
|||
package org.apache.lucene.queryParser.standard.config;
|
||||
|
||||
/**
|
||||
* 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.util.Arrays;
|
||||
|
||||
import org.apache.lucene.queryParser.core.config.QueryConfigHandler;
|
||||
import org.apache.lucene.queryParser.standard.processors.MultiFieldQueryNodeProcessor;
|
||||
import org.apache.lucene.util.AttributeImpl;
|
||||
|
||||
/**
|
||||
* This attribute is used by {@link MultiFieldQueryNodeProcessor} processor and
|
||||
* must be defined in the {@link QueryConfigHandler}. This attribute tells the
|
||||
* processor to which fields the terms in the query should be expanded. <br/>
|
||||
*
|
||||
* @see org.apache.lucene.queryParser.standard.config.MultiFieldAttribute
|
||||
*/
|
||||
public class MultiFieldAttributeImpl extends AttributeImpl
|
||||
implements MultiFieldAttribute {
|
||||
|
||||
private CharSequence[] fields;
|
||||
|
||||
public MultiFieldAttributeImpl() {
|
||||
// empty constructor
|
||||
}
|
||||
|
||||
public void setFields(CharSequence[] fields) {
|
||||
this.fields = fields;
|
||||
}
|
||||
|
||||
public CharSequence[] getFields() {
|
||||
return this.fields;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clear() {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void copyTo(AttributeImpl target) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object other) {
|
||||
|
||||
if (other instanceof MultiFieldAttributeImpl) {
|
||||
MultiFieldAttributeImpl fieldsAttr = (MultiFieldAttributeImpl) other;
|
||||
|
||||
return Arrays.equals(this.fields, fieldsAttr.fields);
|
||||
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Arrays.hashCode(this.fields);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "<fieldsAttribute fields=" + Arrays.toString(this.fields) + "/>";
|
||||
}
|
||||
|
||||
}
|
|
@ -1,40 +0,0 @@
|
|||
package org.apache.lucene.queryParser.standard.config;
|
||||
|
||||
/**
|
||||
* 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.queryParser.core.config.QueryConfigHandler;
|
||||
import org.apache.lucene.queryParser.standard.processors.ParametricRangeQueryNodeProcessor;
|
||||
import org.apache.lucene.search.MultiTermQuery;
|
||||
import org.apache.lucene.search.MultiTermQuery.RewriteMethod;
|
||||
import org.apache.lucene.util.Attribute;
|
||||
|
||||
/**
|
||||
* This attribute is used by {@link ParametricRangeQueryNodeProcessor} processor
|
||||
* and should be defined in the {@link QueryConfigHandler} used by this
|
||||
* processor. It basically tells the processor which {@link RewriteMethod} to
|
||||
* use. <br/>
|
||||
*
|
||||
*/
|
||||
public interface MultiTermRewriteMethodAttribute extends Attribute {
|
||||
|
||||
public static final String TAG_ID = "MultiTermRewriteMethodAttribute";
|
||||
|
||||
public void setMultiTermRewriteMethod(MultiTermQuery.RewriteMethod method);
|
||||
|
||||
public MultiTermQuery.RewriteMethod getMultiTermRewriteMethod();
|
||||
}
|
|
@ -1,86 +0,0 @@
|
|||
package org.apache.lucene.queryParser.standard.config;
|
||||
|
||||
/**
|
||||
* 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.queryParser.core.config.QueryConfigHandler;
|
||||
import org.apache.lucene.queryParser.standard.processors.ParametricRangeQueryNodeProcessor;
|
||||
import org.apache.lucene.search.MultiTermQuery;
|
||||
import org.apache.lucene.search.MultiTermQuery.RewriteMethod;
|
||||
import org.apache.lucene.util.AttributeImpl;
|
||||
|
||||
/**
|
||||
* This attribute is used by {@link ParametricRangeQueryNodeProcessor} processor
|
||||
* and should be defined in the {@link QueryConfigHandler} used by this
|
||||
* processor. It basically tells the processor which {@link RewriteMethod} to
|
||||
* use. <br/>
|
||||
*
|
||||
* @see MultiTermRewriteMethodAttribute
|
||||
*/
|
||||
public class MultiTermRewriteMethodAttributeImpl extends AttributeImpl
|
||||
implements MultiTermRewriteMethodAttribute {
|
||||
|
||||
private MultiTermQuery.RewriteMethod multiTermRewriteMethod = MultiTermQuery.CONSTANT_SCORE_AUTO_REWRITE_DEFAULT;
|
||||
|
||||
public MultiTermRewriteMethodAttributeImpl() {
|
||||
// empty constructor
|
||||
}
|
||||
|
||||
public void setMultiTermRewriteMethod(MultiTermQuery.RewriteMethod method) {
|
||||
multiTermRewriteMethod = method;
|
||||
}
|
||||
|
||||
public MultiTermQuery.RewriteMethod getMultiTermRewriteMethod() {
|
||||
return multiTermRewriteMethod;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clear() {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void copyTo(AttributeImpl target) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object other) {
|
||||
|
||||
if (other instanceof MultiTermRewriteMethodAttributeImpl
|
||||
&& ((MultiTermRewriteMethodAttributeImpl) other).multiTermRewriteMethod == this.multiTermRewriteMethod) {
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return multiTermRewriteMethod.hashCode();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "<multiTermRewriteMethod multiTermRewriteMethod="
|
||||
+ this.multiTermRewriteMethod + "/>";
|
||||
}
|
||||
|
||||
}
|
|
@ -1,33 +0,0 @@
|
|||
package org.apache.lucene.queryParser.standard.config;
|
||||
|
||||
/**
|
||||
* 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.queryParser.core.config.QueryConfigHandler;
|
||||
import org.apache.lucene.queryParser.standard.processors.AnalyzerQueryNodeProcessor;
|
||||
import org.apache.lucene.util.Attribute;
|
||||
|
||||
/**
|
||||
* This attribute is used by {@link AnalyzerQueryNodeProcessor} processor and
|
||||
* must be defined in the {@link QueryConfigHandler}. This attribute tells the
|
||||
* processor if the position increment is enabled. <br/>
|
||||
*
|
||||
*/
|
||||
public interface PositionIncrementsAttribute extends Attribute {
|
||||
public void setPositionIncrementsEnabled(boolean positionIncrementsEnabled);
|
||||
public boolean isPositionIncrementsEnabled();
|
||||
}
|
|
@ -1,83 +0,0 @@
|
|||
package org.apache.lucene.queryParser.standard.config;
|
||||
|
||||
/**
|
||||
* 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.queryParser.core.config.QueryConfigHandler;
|
||||
import org.apache.lucene.queryParser.standard.processors.AnalyzerQueryNodeProcessor;
|
||||
import org.apache.lucene.util.AttributeImpl;
|
||||
|
||||
/**
|
||||
* This attribute is used by {@link AnalyzerQueryNodeProcessor} processor and
|
||||
* must be defined in the {@link QueryConfigHandler}. This attribute tells the
|
||||
* processor if the position increment is enabled. <br/>
|
||||
*
|
||||
* @see org.apache.lucene.queryParser.standard.config.PositionIncrementsAttribute
|
||||
*/
|
||||
public class PositionIncrementsAttributeImpl extends AttributeImpl
|
||||
implements PositionIncrementsAttribute {
|
||||
|
||||
private boolean positionIncrementsEnabled = false;
|
||||
|
||||
public PositionIncrementsAttributeImpl() {
|
||||
positionIncrementsEnabled = false; //default in 2.4
|
||||
}
|
||||
|
||||
public void setPositionIncrementsEnabled(boolean positionIncrementsEnabled) {
|
||||
this.positionIncrementsEnabled = positionIncrementsEnabled;
|
||||
}
|
||||
|
||||
public boolean isPositionIncrementsEnabled() {
|
||||
return this.positionIncrementsEnabled;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clear() {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void copyTo(AttributeImpl target) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object other) {
|
||||
|
||||
if (other instanceof PositionIncrementsAttributeImpl
|
||||
&& ((PositionIncrementsAttributeImpl) other).positionIncrementsEnabled == this.positionIncrementsEnabled) {
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return this.positionIncrementsEnabled ? -1 : Integer.MAX_VALUE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "<positionIncrements positionIncrementsEnabled="
|
||||
+ this.positionIncrementsEnabled + "/>";
|
||||
}
|
||||
|
||||
}
|
|
@ -17,37 +17,173 @@ package org.apache.lucene.queryParser.standard.config;
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
|
||||
import org.apache.lucene.analysis.Analyzer;
|
||||
import org.apache.lucene.document.DateTools;
|
||||
import org.apache.lucene.document.DateTools.Resolution;
|
||||
import org.apache.lucene.queryParser.core.config.ConfigurationKey;
|
||||
import org.apache.lucene.queryParser.core.config.FieldConfig;
|
||||
import org.apache.lucene.queryParser.core.config.QueryConfigHandler;
|
||||
import org.apache.lucene.queryParser.standard.StandardQueryParser;
|
||||
import org.apache.lucene.queryParser.standard.processors.StandardQueryNodeProcessorPipeline;
|
||||
import org.apache.lucene.search.MultiTermQuery;
|
||||
import org.apache.lucene.search.MultiTermQuery.RewriteMethod;
|
||||
|
||||
/**
|
||||
* This query configuration handler is used for almost every processor defined
|
||||
* in the {@link StandardQueryNodeProcessorPipeline} processor pipeline. It holds
|
||||
* attributes that reproduces the configuration that could be set on the old
|
||||
* configuration methods that reproduce the configuration methods that could be set on the old
|
||||
* lucene 2.4 QueryParser class. <br/>
|
||||
*
|
||||
* @see StandardQueryNodeProcessorPipeline
|
||||
*/
|
||||
public class StandardQueryConfigHandler extends QueryConfigHandler {
|
||||
|
||||
final public static class ConfigurationKeys {
|
||||
|
||||
/**
|
||||
* Key used to set whether position increments is enabled
|
||||
*
|
||||
* @see StandardQueryParser#setEnablePositionIncrements(boolean)
|
||||
* @see StandardQueryParser#getEnablePositionIncrements()
|
||||
*/
|
||||
final public static ConfigurationKey<Boolean> ENABLE_POSITION_INCREMENTS = ConfigurationKey.newInstance();
|
||||
|
||||
/**
|
||||
* Key used to set whether expanded terms should be expanded
|
||||
*
|
||||
* @see StandardQueryParser#setLowercaseExpandedTerms(boolean)
|
||||
* @see StandardQueryParser#getLowercaseExpandedTerms()
|
||||
*/
|
||||
final public static ConfigurationKey<Boolean> LOWERCASE_EXPANDED_TERMS = ConfigurationKey.newInstance();
|
||||
|
||||
/**
|
||||
* Key used to set whether leading wildcards are supported
|
||||
*
|
||||
* @see StandardQueryParser#setAllowLeadingWildcard(boolean)
|
||||
* @see StandardQueryParser#getAllowLeadingWildcard()
|
||||
*/
|
||||
final public static ConfigurationKey<Boolean> ALLOW_LEADING_WILDCARD = ConfigurationKey.newInstance();
|
||||
|
||||
/**
|
||||
* Key used to set the {@link Analyzer} used for terms found in the query
|
||||
*
|
||||
* @see StandardQueryParser#setAnalyzer(Analyzer)
|
||||
* @see StandardQueryParser#getAnalyzer()
|
||||
*/
|
||||
final public static ConfigurationKey<Analyzer> ANALYZER = ConfigurationKey.newInstance();
|
||||
|
||||
/**
|
||||
* Key used to set the default boolean operator
|
||||
*
|
||||
* @see StandardQueryParser#setDefaultOperator(org.apache.lucene.queryParser.standard.config.StandardQueryConfigHandler.Operator)
|
||||
* @see StandardQueryParser#getDefaultOperator()
|
||||
*/
|
||||
final public static ConfigurationKey<Operator> DEFAULT_OPERATOR = ConfigurationKey.newInstance();
|
||||
|
||||
/**
|
||||
* Key used to set the default phrase slop
|
||||
*
|
||||
* @see StandardQueryParser#setPhraseSlop(int)
|
||||
* @see StandardQueryParser#getPhraseSlop()
|
||||
*/
|
||||
final public static ConfigurationKey<Integer> PHRASE_SLOP = ConfigurationKey.newInstance();
|
||||
|
||||
/**
|
||||
* Key used to set the {@link Locale} used when parsing the query
|
||||
*
|
||||
* @see StandardQueryParser#setLocale(Locale)
|
||||
* @see StandardQueryParser#getLocale()
|
||||
*/
|
||||
final public static ConfigurationKey<Locale> LOCALE = ConfigurationKey.newInstance();
|
||||
|
||||
/**
|
||||
* Key used to set the {@link RewriteMethod} used when creating queries
|
||||
*
|
||||
* @see StandardQueryParser#setMultiTermRewriteMethod(org.apache.lucene.search.MultiTermQuery.RewriteMethod)
|
||||
* @see StandardQueryParser#getMultiTermRewriteMethod()
|
||||
*/
|
||||
final public static ConfigurationKey<MultiTermQuery.RewriteMethod> MULTI_TERM_REWRITE_METHOD = ConfigurationKey.newInstance();
|
||||
|
||||
/**
|
||||
* Key used to set the fields a query should be expanded to when the field
|
||||
* is <code>null</code>
|
||||
*
|
||||
* @see StandardQueryParser#setMultiFields(CharSequence[])
|
||||
* @see StandardQueryParser#getMultiFields(CharSequence[])
|
||||
*/
|
||||
final public static ConfigurationKey<CharSequence[]> MULTI_FIELDS = ConfigurationKey.newInstance();
|
||||
|
||||
/**
|
||||
* Key used to set a field to boost map that is used to set the boost for each field
|
||||
*
|
||||
* @see StandardQueryParser#setFieldsBoost(Map)
|
||||
* @see StandardQueryParser#getFieldsBoost()
|
||||
*/
|
||||
final public static ConfigurationKey<Map<String,Float>> FIELD_BOOST_MAP = ConfigurationKey.newInstance();
|
||||
|
||||
/**
|
||||
* Key used to set a field to {@link Resolution} map that is used
|
||||
* to normalize each date field value.
|
||||
*
|
||||
* @see StandardQueryParser#setDateResolutionMap(Map)
|
||||
* @see StandardQueryParser#getDateResolutionMap()
|
||||
*/
|
||||
final public static ConfigurationKey<Map<CharSequence, DateTools.Resolution>> FIELD_DATE_RESOLUTION_MAP = ConfigurationKey.newInstance();
|
||||
|
||||
/**
|
||||
* Key used to set the {@link FuzzyConfig} used to create fuzzy queries.
|
||||
*
|
||||
* @see StandardQueryParser#setFuzzyMinSim(float)
|
||||
* @see StandardQueryParser#setFuzzyPrefixLength(int)
|
||||
* @see StandardQueryParser#getFuzzyMinSim()
|
||||
* @see StandardQueryParser#getFuzzyPrefixLength()
|
||||
*/
|
||||
final public static ConfigurationKey<FuzzyConfig> FUZZY_CONFIG = ConfigurationKey.newInstance();
|
||||
|
||||
/**
|
||||
* Key used to set default {@link Resolution}.
|
||||
*
|
||||
* @see StandardQueryParser#setDateResolution(org.apache.lucene.document.DateTools.Resolution)
|
||||
* @see StandardQueryParser#getDateResolution()
|
||||
*/
|
||||
final public static ConfigurationKey<DateTools.Resolution> DATE_RESOLUTION = ConfigurationKey.newInstance();
|
||||
|
||||
/**
|
||||
* Key used to set the boost value in {@link FieldConfig} objects.
|
||||
*
|
||||
* @see StandardQueryParser#setFieldsBoost(Map)
|
||||
* @see StandardQueryParser#getFieldsBoost()
|
||||
*/
|
||||
final public static ConfigurationKey<Float> BOOST = ConfigurationKey.newInstance();
|
||||
|
||||
}
|
||||
|
||||
public static enum Operator {
|
||||
AND, OR;
|
||||
}
|
||||
|
||||
public StandardQueryConfigHandler() {
|
||||
// Add listener that will build the FieldConfig attributes.
|
||||
// Add listener that will build the FieldConfig.
|
||||
addFieldConfigListener(new FieldBoostMapFCListener(this));
|
||||
addFieldConfigListener(new FieldDateResolutionFCListener(this));
|
||||
|
||||
|
||||
// Default Values
|
||||
addAttribute(DefaultOperatorAttribute.class);
|
||||
addAttribute(AnalyzerAttribute.class);
|
||||
addAttribute(FuzzyAttribute.class);
|
||||
addAttribute(LowercaseExpandedTermsAttribute.class);
|
||||
addAttribute(MultiTermRewriteMethodAttribute.class);
|
||||
addAttribute(AllowLeadingWildcardAttribute.class);
|
||||
addAttribute(PositionIncrementsAttribute.class);
|
||||
addAttribute(LocaleAttribute.class);
|
||||
addAttribute(DefaultPhraseSlopAttribute.class);
|
||||
addAttribute(MultiTermRewriteMethodAttribute.class);
|
||||
set(ConfigurationKeys.ALLOW_LEADING_WILDCARD, false); // default in 2.9
|
||||
set(ConfigurationKeys.ANALYZER, null); //default value 2.4
|
||||
set(ConfigurationKeys.DEFAULT_OPERATOR, Operator.OR);
|
||||
set(ConfigurationKeys.PHRASE_SLOP, 0); //default value 2.4
|
||||
set(ConfigurationKeys.LOWERCASE_EXPANDED_TERMS, true); //default value 2.4
|
||||
set(ConfigurationKeys.ENABLE_POSITION_INCREMENTS, false); //default value 2.4
|
||||
set(ConfigurationKeys.FIELD_BOOST_MAP, new LinkedHashMap<String, Float>());
|
||||
set(ConfigurationKeys.FUZZY_CONFIG, new FuzzyConfig());
|
||||
set(ConfigurationKeys.LOCALE, Locale.getDefault());
|
||||
set(ConfigurationKeys.MULTI_TERM_REWRITE_METHOD, MultiTermQuery.CONSTANT_SCORE_AUTO_REWRITE_DEFAULT);
|
||||
set(ConfigurationKeys.FIELD_DATE_RESOLUTION_MAP, new HashMap<CharSequence, DateTools.Resolution>());
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
<h2>Standard Lucene Query Configuration</h2>
|
||||
<p>
|
||||
The package org.apache.lucene.queryParser.standard.config contains the Lucene
|
||||
query configuration handler and all the attributes used by it. This configuration
|
||||
query configuration handler (StandardQueryConfigHandler). This configuration
|
||||
handler reproduces almost everything that could be set on the old query parser.
|
||||
</p>
|
||||
<p>
|
||||
|
|
|
@ -26,18 +26,18 @@ import org.apache.lucene.queryParser.core.messages.QueryParserMessages;
|
|||
import org.apache.lucene.queryParser.core.nodes.QueryNode;
|
||||
import org.apache.lucene.queryParser.core.processors.QueryNodeProcessorImpl;
|
||||
import org.apache.lucene.queryParser.core.util.UnescapedCharSequence;
|
||||
import org.apache.lucene.queryParser.standard.config.AllowLeadingWildcardAttribute;
|
||||
import org.apache.lucene.queryParser.standard.config.StandardQueryConfigHandler.ConfigurationKeys;
|
||||
import org.apache.lucene.queryParser.standard.nodes.WildcardQueryNode;
|
||||
import org.apache.lucene.queryParser.standard.parser.EscapeQuerySyntaxImpl;
|
||||
|
||||
/**
|
||||
* This processor verifies if the attribute
|
||||
* {@link AllowLeadingWildcardAttribute} is defined in the
|
||||
* This processor verifies if
|
||||
* {@link ConfigurationKeys#ALLOW_LEADING_WILDCARD} is defined in the
|
||||
* {@link QueryConfigHandler}. If it is and leading wildcard is not allowed, it
|
||||
* looks for every {@link WildcardQueryNode} contained in the query node tree
|
||||
* and throws an exception if any of them has a leading wildcard ('*' or '?'). <br/>
|
||||
*
|
||||
* @see AllowLeadingWildcardAttribute
|
||||
* @see ConfigurationKeys#ALLOW_LEADING_WILDCARD
|
||||
*/
|
||||
public class AllowLeadingWildcardProcessor extends QueryNodeProcessorImpl {
|
||||
|
||||
|
@ -47,11 +47,11 @@ public class AllowLeadingWildcardProcessor extends QueryNodeProcessorImpl {
|
|||
|
||||
@Override
|
||||
public QueryNode process(QueryNode queryTree) throws QueryNodeException {
|
||||
Boolean allowsLeadingWildcard = getQueryConfigHandler().get(ConfigurationKeys.ALLOW_LEADING_WILDCARD);
|
||||
|
||||
if (getQueryConfigHandler().hasAttribute(AllowLeadingWildcardAttribute.class)) {
|
||||
if (allowsLeadingWildcard != null) {
|
||||
|
||||
AllowLeadingWildcardAttribute alwAttr= getQueryConfigHandler().getAttribute(AllowLeadingWildcardAttribute.class);
|
||||
if (!alwAttr.isAllowLeadingWildcard()) {
|
||||
if (!allowsLeadingWildcard) {
|
||||
return super.process(queryTree);
|
||||
}
|
||||
|
||||
|
|
|
@ -40,14 +40,14 @@ import org.apache.lucene.queryParser.core.nodes.QuotedFieldQueryNode;
|
|||
import org.apache.lucene.queryParser.core.nodes.TextableQueryNode;
|
||||
import org.apache.lucene.queryParser.core.nodes.TokenizedPhraseQueryNode;
|
||||
import org.apache.lucene.queryParser.core.processors.QueryNodeProcessorImpl;
|
||||
import org.apache.lucene.queryParser.standard.config.AnalyzerAttribute;
|
||||
import org.apache.lucene.queryParser.standard.config.PositionIncrementsAttribute;
|
||||
import org.apache.lucene.queryParser.standard.config.StandardQueryConfigHandler;
|
||||
import org.apache.lucene.queryParser.standard.config.StandardQueryConfigHandler.ConfigurationKeys;
|
||||
import org.apache.lucene.queryParser.standard.nodes.MultiPhraseQueryNode;
|
||||
import org.apache.lucene.queryParser.standard.nodes.StandardBooleanQueryNode;
|
||||
import org.apache.lucene.queryParser.standard.nodes.WildcardQueryNode;
|
||||
|
||||
/**
|
||||
* This processor verifies if the attribute {@link AnalyzerQueryNodeProcessor}
|
||||
* This processor verifies if {@link ConfigurationKeys#ANALYZER}
|
||||
* is defined in the {@link QueryConfigHandler}. If it is and the analyzer is
|
||||
* not <code>null</code>, it looks for every {@link FieldQueryNode} that is not
|
||||
* {@link WildcardQueryNode}, {@link FuzzyQueryNode} or
|
||||
|
@ -64,6 +64,7 @@ import org.apache.lucene.queryParser.standard.nodes.WildcardQueryNode;
|
|||
* If no term is returned by the analyzer a {@link NoTokenFoundQueryNode} object
|
||||
* is returned. <br/>
|
||||
*
|
||||
* @see ConfigurationKeys#ANALYZER
|
||||
* @see Analyzer
|
||||
* @see TokenStream
|
||||
*/
|
||||
|
@ -79,24 +80,15 @@ public class AnalyzerQueryNodeProcessor extends QueryNodeProcessorImpl {
|
|||
|
||||
@Override
|
||||
public QueryNode process(QueryNode queryTree) throws QueryNodeException {
|
||||
|
||||
if (getQueryConfigHandler().hasAttribute(AnalyzerAttribute.class)) {
|
||||
|
||||
this.analyzer = getQueryConfigHandler().getAttribute(
|
||||
AnalyzerAttribute.class).getAnalyzer();
|
||||
|
||||
Analyzer analyzer = getQueryConfigHandler().get(ConfigurationKeys.ANALYZER);
|
||||
|
||||
if (analyzer != null) {
|
||||
this.analyzer = analyzer;
|
||||
this.positionIncrementsEnabled = false;
|
||||
Boolean positionIncrementsEnabled = getQueryConfigHandler().get(ConfigurationKeys.ENABLE_POSITION_INCREMENTS);
|
||||
|
||||
if (getQueryConfigHandler().hasAttribute(
|
||||
PositionIncrementsAttribute.class)) {
|
||||
|
||||
if (getQueryConfigHandler().getAttribute(
|
||||
PositionIncrementsAttribute.class).isPositionIncrementsEnabled()) {
|
||||
|
||||
this.positionIncrementsEnabled = true;
|
||||
|
||||
}
|
||||
|
||||
if (positionIncrementsEnabled != null) {
|
||||
this.positionIncrementsEnabled = positionIncrementsEnabled;
|
||||
}
|
||||
|
||||
if (this.analyzer != null) {
|
||||
|
|
|
@ -27,14 +27,14 @@ import org.apache.lucene.queryParser.core.nodes.FieldableNode;
|
|||
import org.apache.lucene.queryParser.core.nodes.QueryNode;
|
||||
import org.apache.lucene.queryParser.core.processors.QueryNodeProcessorImpl;
|
||||
import org.apache.lucene.queryParser.core.util.StringUtils;
|
||||
import org.apache.lucene.queryParser.standard.config.BoostAttribute;
|
||||
import org.apache.lucene.queryParser.standard.config.StandardQueryConfigHandler.ConfigurationKeys;
|
||||
|
||||
/**
|
||||
* This processor iterates the query node tree looking for every
|
||||
* {@link FieldableNode} that has the attribute {@link BoostAttribute} in its
|
||||
* {@link FieldableNode} that has {@link ConfigurationKeys#BOOST} in its
|
||||
* config. If there is, the boost is applied to that {@link FieldableNode}. <br/>
|
||||
*
|
||||
* @see BoostAttribute
|
||||
* @see ConfigurationKeys#BOOST
|
||||
* @see QueryConfigHandler
|
||||
* @see FieldableNode
|
||||
*/
|
||||
|
@ -53,10 +53,12 @@ public class BoostQueryNodeProcessor extends QueryNodeProcessorImpl {
|
|||
CharSequence field = fieldNode.getField();
|
||||
FieldConfig fieldConfig = config.getFieldConfig(StringUtils.toString(field));
|
||||
|
||||
if (fieldConfig != null && fieldConfig.hasAttribute(BoostAttribute.class)) {
|
||||
BoostAttribute boostAttr = fieldConfig.getAttribute(BoostAttribute.class);
|
||||
if (fieldConfig != null) {
|
||||
Float boost = fieldConfig.get(ConfigurationKeys.BOOST);
|
||||
|
||||
return new BoostQueryNode(node, boostAttr.getBoost());
|
||||
if (boost != null) {
|
||||
return new BoostQueryNode(node, boost);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -25,19 +25,20 @@ import org.apache.lucene.queryParser.core.nodes.QueryNode;
|
|||
import org.apache.lucene.queryParser.core.nodes.SlopQueryNode;
|
||||
import org.apache.lucene.queryParser.core.nodes.TokenizedPhraseQueryNode;
|
||||
import org.apache.lucene.queryParser.core.processors.QueryNodeProcessorImpl;
|
||||
import org.apache.lucene.queryParser.standard.config.DefaultPhraseSlopAttribute;
|
||||
import org.apache.lucene.queryParser.standard.config.StandardQueryConfigHandler;
|
||||
import org.apache.lucene.queryParser.standard.config.StandardQueryConfigHandler.ConfigurationKeys;
|
||||
import org.apache.lucene.queryParser.standard.nodes.MultiPhraseQueryNode;
|
||||
|
||||
/**
|
||||
* This processor verifies if the attribute {@link DefaultPhraseSlopAttribute}
|
||||
* This processor verifies if {@link ConfigurationKeys#PHRASE_SLOP}
|
||||
* is defined in the {@link QueryConfigHandler}. If it is, it looks for every
|
||||
* {@link TokenizedPhraseQueryNode} and {@link MultiPhraseQueryNode} that does
|
||||
* not have any {@link SlopQueryNode} applied to it and creates an
|
||||
* {@link SlopQueryNode} and apply to it. The new {@link SlopQueryNode} has the
|
||||
* same slop value defined in the attribute. <br/>
|
||||
* same slop value defined in the configuration. <br/>
|
||||
*
|
||||
* @see SlopQueryNode
|
||||
* @see DefaultPhraseSlopAttribute
|
||||
* @see ConfigurationKeys#PHRASE_SLOP
|
||||
*/
|
||||
public class DefaultPhraseSlopQueryNodeProcessor extends QueryNodeProcessorImpl {
|
||||
|
||||
|
@ -54,10 +55,10 @@ public class DefaultPhraseSlopQueryNodeProcessor extends QueryNodeProcessorImpl
|
|||
QueryConfigHandler queryConfig = getQueryConfigHandler();
|
||||
|
||||
if (queryConfig != null) {
|
||||
|
||||
if (queryConfig.hasAttribute(DefaultPhraseSlopAttribute.class)) {
|
||||
this.defaultPhraseSlop = queryConfig.getAttribute(
|
||||
DefaultPhraseSlopAttribute.class).getDefaultPhraseSlop();
|
||||
Integer defaultPhraseSlop = queryConfig.get(ConfigurationKeys.PHRASE_SLOP);
|
||||
|
||||
if (defaultPhraseSlop != null) {
|
||||
this.defaultPhraseSlop = defaultPhraseSlop;
|
||||
|
||||
return super.process(queryTree);
|
||||
|
||||
|
|
|
@ -24,17 +24,20 @@ import org.apache.lucene.queryParser.core.config.QueryConfigHandler;
|
|||
import org.apache.lucene.queryParser.core.nodes.FuzzyQueryNode;
|
||||
import org.apache.lucene.queryParser.core.nodes.QueryNode;
|
||||
import org.apache.lucene.queryParser.core.processors.QueryNodeProcessorImpl;
|
||||
import org.apache.lucene.queryParser.standard.config.FuzzyAttribute;
|
||||
import org.apache.lucene.queryParser.standard.config.FuzzyConfig;
|
||||
import org.apache.lucene.queryParser.standard.config.StandardQueryConfigHandler;
|
||||
import org.apache.lucene.queryParser.standard.config.StandardQueryConfigHandler.ConfigurationKeys;
|
||||
import org.apache.lucene.search.FuzzyQuery;
|
||||
|
||||
/**
|
||||
* This processor iterates the query node tree looking for every
|
||||
* {@link FuzzyQueryNode}, when this kind of node is found, it checks on the
|
||||
* query configuration for {@link FuzzyAttribute}, gets the fuzzy prefix length
|
||||
* and default similarity from it and set to the fuzzy node. For more
|
||||
* information about fuzzy prefix length check: {@link FuzzyQuery}. <br/>
|
||||
* query configuration for
|
||||
* {@link ConfigurationKeys#FUZZY_CONFIG}, gets the
|
||||
* fuzzy prefix length and default similarity from it and set to the fuzzy node.
|
||||
* For more information about fuzzy prefix length check: {@link FuzzyQuery}. <br/>
|
||||
*
|
||||
* @see FuzzyAttribute
|
||||
* @see ConfigurationKeys#FUZZY_CONFIG
|
||||
* @see FuzzyQuery
|
||||
* @see FuzzyQueryNode
|
||||
*/
|
||||
|
@ -54,18 +57,17 @@ public class FuzzyQueryNodeProcessor extends QueryNodeProcessorImpl {
|
|||
FuzzyQueryNode fuzzyNode = (FuzzyQueryNode) node;
|
||||
QueryConfigHandler config = getQueryConfigHandler();
|
||||
|
||||
if (config != null && config.hasAttribute(FuzzyAttribute.class)) {
|
||||
FuzzyAttribute fuzzyAttr = config.getAttribute(FuzzyAttribute.class);
|
||||
fuzzyNode.setPrefixLength(fuzzyAttr.getPrefixLength());
|
||||
FuzzyConfig fuzzyConfig = null;
|
||||
|
||||
if (config != null && (fuzzyConfig = config.get(ConfigurationKeys.FUZZY_CONFIG)) != null) {
|
||||
fuzzyNode.setPrefixLength(fuzzyConfig.getPrefixLength());
|
||||
|
||||
if (fuzzyNode.getSimilarity() < 0) {
|
||||
fuzzyNode.setSimilarity(fuzzyAttr.getFuzzyMinSimilarity());
|
||||
|
||||
fuzzyNode.setSimilarity(fuzzyConfig.getMinSimilarity());
|
||||
}
|
||||
|
||||
|
||||
} else if (fuzzyNode.getSimilarity() < 0) {
|
||||
throw new IllegalArgumentException("No "
|
||||
+ FuzzyAttribute.class.getName() + " set in the config");
|
||||
throw new IllegalArgumentException("No FUZZY_CONFIG set in the config");
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -31,8 +31,9 @@ import org.apache.lucene.queryParser.core.nodes.QueryNode;
|
|||
import org.apache.lucene.queryParser.core.nodes.ModifierQueryNode.Modifier;
|
||||
import org.apache.lucene.queryParser.core.parser.SyntaxParser;
|
||||
import org.apache.lucene.queryParser.core.processors.QueryNodeProcessor;
|
||||
import org.apache.lucene.queryParser.standard.config.DefaultOperatorAttribute;
|
||||
import org.apache.lucene.queryParser.standard.config.DefaultOperatorAttribute.Operator;
|
||||
import org.apache.lucene.queryParser.standard.config.StandardQueryConfigHandler;
|
||||
import org.apache.lucene.queryParser.standard.config.StandardQueryConfigHandler.ConfigurationKeys;
|
||||
import org.apache.lucene.queryParser.standard.config.StandardQueryConfigHandler.Operator;
|
||||
import org.apache.lucene.queryParser.standard.nodes.BooleanModifierNode;
|
||||
|
||||
/**
|
||||
|
@ -64,14 +65,14 @@ public class GroupQueryNodeProcessor implements QueryNodeProcessor {
|
|||
}
|
||||
|
||||
public QueryNode process(QueryNode queryTree) throws QueryNodeException {
|
||||
|
||||
if (!getQueryConfigHandler().hasAttribute(DefaultOperatorAttribute.class)) {
|
||||
Operator defaultOperator = getQueryConfigHandler().get(ConfigurationKeys.DEFAULT_OPERATOR);
|
||||
|
||||
if (defaultOperator == null) {
|
||||
throw new IllegalArgumentException(
|
||||
"DefaultOperatorAttribute should be set on the QueryConfigHandler");
|
||||
"DEFAULT_OPERATOR should be set on the QueryConfigHandler");
|
||||
}
|
||||
|
||||
this.usingAnd = Operator.AND == getQueryConfigHandler()
|
||||
.getAttribute(DefaultOperatorAttribute.class).getOperator();
|
||||
this.usingAnd = StandardQueryConfigHandler.Operator.AND == defaultOperator;
|
||||
|
||||
if (queryTree instanceof GroupQueryNode) {
|
||||
queryTree = ((GroupQueryNode) queryTree).getChild();
|
||||
|
|
|
@ -27,19 +27,20 @@ import org.apache.lucene.queryParser.core.nodes.QueryNode;
|
|||
import org.apache.lucene.queryParser.core.nodes.TextableQueryNode;
|
||||
import org.apache.lucene.queryParser.core.processors.QueryNodeProcessorImpl;
|
||||
import org.apache.lucene.queryParser.core.util.UnescapedCharSequence;
|
||||
import org.apache.lucene.queryParser.standard.config.LowercaseExpandedTermsAttribute;
|
||||
import org.apache.lucene.queryParser.standard.config.StandardQueryConfigHandler;
|
||||
import org.apache.lucene.queryParser.standard.config.StandardQueryConfigHandler.ConfigurationKeys;
|
||||
import org.apache.lucene.queryParser.standard.nodes.RegexpQueryNode;
|
||||
import org.apache.lucene.queryParser.standard.nodes.WildcardQueryNode;
|
||||
|
||||
/**
|
||||
* This processor verifies if the attribute
|
||||
* {@link LowercaseExpandedTermsAttribute} is defined in the
|
||||
* This processor verifies if
|
||||
* {@link ConfigurationKeys#LOWERCASE_EXPANDED_TERMS} is defined in the
|
||||
* {@link QueryConfigHandler}. If it is and the expanded terms should be
|
||||
* lower-cased, it looks for every {@link WildcardQueryNode},
|
||||
* {@link FuzzyQueryNode} and {@link ParametricQueryNode} and lower-case its
|
||||
* term. <br/>
|
||||
*
|
||||
* @see LowercaseExpandedTermsAttribute
|
||||
* @see ConfigurationKeys#LOWERCASE_EXPANDED_TERMS
|
||||
*/
|
||||
public class LowercaseExpandedTermsQueryNodeProcessor extends
|
||||
QueryNodeProcessorImpl {
|
||||
|
@ -50,17 +51,10 @@ public class LowercaseExpandedTermsQueryNodeProcessor extends
|
|||
|
||||
@Override
|
||||
public QueryNode process(QueryNode queryTree) throws QueryNodeException {
|
||||
Boolean lowercaseExpandedTerms = getQueryConfigHandler().get(ConfigurationKeys.LOWERCASE_EXPANDED_TERMS);
|
||||
|
||||
if (getQueryConfigHandler().hasAttribute(
|
||||
LowercaseExpandedTermsAttribute.class)) {
|
||||
|
||||
if (getQueryConfigHandler().getAttribute(
|
||||
LowercaseExpandedTermsAttribute.class).isLowercaseExpandedTerms()) {
|
||||
|
||||
return super.process(queryTree);
|
||||
|
||||
}
|
||||
|
||||
if (lowercaseExpandedTerms != null && lowercaseExpandedTerms) {
|
||||
return super.process(queryTree);
|
||||
}
|
||||
|
||||
return queryTree;
|
||||
|
|
|
@ -27,7 +27,8 @@ import org.apache.lucene.queryParser.core.nodes.FieldableNode;
|
|||
import org.apache.lucene.queryParser.core.nodes.GroupQueryNode;
|
||||
import org.apache.lucene.queryParser.core.nodes.QueryNode;
|
||||
import org.apache.lucene.queryParser.core.processors.QueryNodeProcessorImpl;
|
||||
import org.apache.lucene.queryParser.standard.config.MultiFieldAttribute;
|
||||
import org.apache.lucene.queryParser.standard.config.StandardQueryConfigHandler;
|
||||
import org.apache.lucene.queryParser.standard.config.StandardQueryConfigHandler.ConfigurationKeys;
|
||||
|
||||
/**
|
||||
* This processor is used to expand terms so the query looks for the same term
|
||||
|
@ -35,13 +36,13 @@ import org.apache.lucene.queryParser.standard.config.MultiFieldAttribute;
|
|||
* <br/>
|
||||
* This processor looks for every {@link FieldableNode} contained in the query
|
||||
* node tree. If a {@link FieldableNode} is found, it checks if there is a
|
||||
* {@link MultiFieldAttribute} defined in the {@link QueryConfigHandler}. If
|
||||
* {@link ConfigurationKeys#MULTI_FIELDS} defined in the {@link QueryConfigHandler}. If
|
||||
* there is, the {@link FieldableNode} is cloned N times and the clones are
|
||||
* added to a {@link BooleanQueryNode} together with the original node. N is
|
||||
* defined by the number of fields that it will be expanded to. The
|
||||
* {@link BooleanQueryNode} is returned. <br/>
|
||||
*
|
||||
* @see MultiFieldAttribute
|
||||
* @see ConfigurationKeys#MULTI_FIELDS
|
||||
*/
|
||||
public class MultiFieldQueryNodeProcessor extends QueryNodeProcessorImpl {
|
||||
|
||||
|
@ -78,15 +79,13 @@ public class MultiFieldQueryNodeProcessor extends QueryNodeProcessorImpl {
|
|||
FieldableNode fieldNode = (FieldableNode) node;
|
||||
|
||||
if (fieldNode.getField() == null) {
|
||||
CharSequence[] fields = getQueryConfigHandler().get(ConfigurationKeys.MULTI_FIELDS);
|
||||
|
||||
if (!getQueryConfigHandler().hasAttribute(MultiFieldAttribute.class)) {
|
||||
if (fields == null) {
|
||||
throw new IllegalArgumentException(
|
||||
"MultiFieldAttribute should be set on the QueryConfigHandler");
|
||||
"StandardQueryConfigHandler.ConfigurationKeys.MULTI_FIELDS should be set on the QueryConfigHandler");
|
||||
}
|
||||
|
||||
CharSequence[] fields = getQueryConfigHandler().getAttribute(
|
||||
MultiFieldAttribute.class).getFields();
|
||||
|
||||
if (fields != null && fields.length > 0) {
|
||||
fieldNode.setField(fields[0]);
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@ import java.util.List;
|
|||
import org.apache.lucene.queryParser.core.nodes.ParametricRangeQueryNode;
|
||||
import org.apache.lucene.queryParser.core.nodes.QueryNode;
|
||||
import org.apache.lucene.queryParser.core.processors.QueryNodeProcessorImpl;
|
||||
import org.apache.lucene.queryParser.standard.config.MultiTermRewriteMethodAttribute;
|
||||
import org.apache.lucene.queryParser.standard.config.StandardQueryConfigHandler.ConfigurationKeys;
|
||||
import org.apache.lucene.queryParser.standard.nodes.RegexpQueryNode;
|
||||
import org.apache.lucene.queryParser.standard.nodes.WildcardQueryNode;
|
||||
import org.apache.lucene.search.MultiTermQuery;
|
||||
|
@ -35,6 +35,8 @@ import org.apache.lucene.search.MultiTermQuery;
|
|||
*/
|
||||
public class MultiTermRewriteMethodProcessor extends QueryNodeProcessorImpl {
|
||||
|
||||
public static final String TAG_ID = "MultiTermRewriteMethodConfiguration";
|
||||
|
||||
@Override
|
||||
protected QueryNode postProcessNode(QueryNode node) {
|
||||
|
||||
|
@ -42,21 +44,18 @@ public class MultiTermRewriteMethodProcessor extends QueryNodeProcessorImpl {
|
|||
// PrefixWildcardQueryNode
|
||||
if (node instanceof WildcardQueryNode
|
||||
|| node instanceof ParametricRangeQueryNode || node instanceof RegexpQueryNode) {
|
||||
|
||||
MultiTermQuery.RewriteMethod rewriteMethod = getQueryConfigHandler().get(ConfigurationKeys.MULTI_TERM_REWRITE_METHOD);
|
||||
|
||||
if (!getQueryConfigHandler().hasAttribute(
|
||||
MultiTermRewriteMethodAttribute.class)) {
|
||||
// This should not happen, this attribute is created in the
|
||||
if (rewriteMethod == null) {
|
||||
// This should not happen, this configuration is set in the
|
||||
// StandardQueryConfigHandler
|
||||
throw new IllegalArgumentException(
|
||||
"MultiTermRewriteMethodAttribute should be set on the QueryConfigHandler");
|
||||
"StandardQueryConfigHandler.ConfigurationKeys.MULTI_TERM_REWRITE_METHOD should be set on the QueryConfigHandler");
|
||||
}
|
||||
|
||||
// read the attribute value and use a TAG to take the value to the Builder
|
||||
MultiTermQuery.RewriteMethod rewriteMethod = getQueryConfigHandler()
|
||||
.getAttribute(MultiTermRewriteMethodAttribute.class)
|
||||
.getMultiTermRewriteMethod();
|
||||
|
||||
node.setTag(MultiTermRewriteMethodAttribute.TAG_ID, rewriteMethod);
|
||||
// use a TAG to take the value to the Builder
|
||||
node.setTag(MultiTermRewriteMethodProcessor.TAG_ID, rewriteMethod);
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -33,8 +33,8 @@ import org.apache.lucene.queryParser.core.nodes.ParametricRangeQueryNode;
|
|||
import org.apache.lucene.queryParser.core.nodes.QueryNode;
|
||||
import org.apache.lucene.queryParser.core.nodes.ParametricQueryNode.CompareOperator;
|
||||
import org.apache.lucene.queryParser.core.processors.QueryNodeProcessorImpl;
|
||||
import org.apache.lucene.queryParser.standard.config.DateResolutionAttribute;
|
||||
import org.apache.lucene.queryParser.standard.config.LocaleAttribute;
|
||||
import org.apache.lucene.queryParser.standard.config.StandardQueryConfigHandler;
|
||||
import org.apache.lucene.queryParser.standard.config.StandardQueryConfigHandler.ConfigurationKeys;
|
||||
import org.apache.lucene.queryParser.standard.nodes.RangeQueryNode;
|
||||
|
||||
/**
|
||||
|
@ -45,16 +45,16 @@ import org.apache.lucene.queryParser.standard.nodes.RangeQueryNode;
|
|||
* value, it will only create the {@link RangeQueryNode} using the non-parsed
|
||||
* values. <br/>
|
||||
* <br/>
|
||||
* If a {@link LocaleAttribute} is defined in the {@link QueryConfigHandler} it
|
||||
* If a {@link ConfigurationKeys#LOCALE} is defined in the {@link QueryConfigHandler} it
|
||||
* will be used to parse the date, otherwise {@link Locale#getDefault()} will be
|
||||
* used. <br/>
|
||||
* <br/>
|
||||
* If a {@link DateResolutionAttribute} is defined and the {@link Resolution} is
|
||||
* If a {@link ConfigurationKeys#DATE_RESOLUTION} is defined and the {@link Resolution} is
|
||||
* not <code>null</code> it will also be used to parse the date value. <br/>
|
||||
* <br/>
|
||||
*
|
||||
* @see DateResolutionAttribute
|
||||
* @see LocaleAttribute
|
||||
* @see ConfigurationKeys#DATE_RESOLUTION
|
||||
* @see ConfigurationKeys#LOCALE
|
||||
* @see RangeQueryNode
|
||||
* @see ParametricRangeQueryNode
|
||||
*/
|
||||
|
@ -71,15 +71,13 @@ public class ParametricRangeQueryNodeProcessor extends QueryNodeProcessorImpl {
|
|||
ParametricRangeQueryNode parametricRangeNode = (ParametricRangeQueryNode) node;
|
||||
ParametricQueryNode upper = parametricRangeNode.getUpperBound();
|
||||
ParametricQueryNode lower = parametricRangeNode.getLowerBound();
|
||||
Locale locale = Locale.getDefault();
|
||||
|
||||
DateTools.Resolution dateRes = null;
|
||||
boolean inclusive = false;
|
||||
Locale locale = getQueryConfigHandler().get(ConfigurationKeys.LOCALE);
|
||||
|
||||
if (getQueryConfigHandler().hasAttribute(LocaleAttribute.class)) {
|
||||
|
||||
locale = getQueryConfigHandler().getAttribute(LocaleAttribute.class)
|
||||
.getLocale();
|
||||
|
||||
if (locale == null) {
|
||||
locale = Locale.getDefault();
|
||||
}
|
||||
|
||||
CharSequence field = parametricRangeNode.getField();
|
||||
|
@ -93,14 +91,7 @@ public class ParametricRangeQueryNodeProcessor extends QueryNodeProcessorImpl {
|
|||
.getFieldConfig(fieldStr);
|
||||
|
||||
if (fieldConfig != null) {
|
||||
|
||||
if (fieldConfig.hasAttribute(DateResolutionAttribute.class)) {
|
||||
|
||||
dateRes = fieldConfig.getAttribute(DateResolutionAttribute.class)
|
||||
.getDateResolution();
|
||||
|
||||
}
|
||||
|
||||
dateRes = fieldConfig.get(ConfigurationKeys.DATE_RESOLUTION);
|
||||
}
|
||||
|
||||
if (upper.getOperator() == CompareOperator.LE) {
|
||||
|
|
|
@ -108,8 +108,7 @@ builder that will transform the QueryNode into Lucene Query object.
|
|||
</dl>
|
||||
|
||||
<p>
|
||||
Furthermore, the query parser uses flexible configuration objects, which
|
||||
are based on AttributeSource/Attribute. It also uses message classes that
|
||||
Furthermore, the query parser uses flexible configuration objects. It also uses message classes that
|
||||
allow to attach resource bundles. This makes it possible to translate
|
||||
messages, which is an important feature of a query parser.
|
||||
</p>
|
||||
|
|
|
@ -38,7 +38,7 @@ import org.apache.lucene.document.DateTools;
|
|||
import org.apache.lucene.queryParser.TestQueryParser;
|
||||
import org.apache.lucene.queryParser.core.QueryNodeException;
|
||||
import org.apache.lucene.queryParser.core.QueryNodeParseException;
|
||||
import org.apache.lucene.queryParser.standard.config.DefaultOperatorAttribute.Operator;
|
||||
import org.apache.lucene.queryParser.standard.config.StandardQueryConfigHandler;
|
||||
import org.apache.lucene.queryParser.standard.parser.ParseException;
|
||||
import org.apache.lucene.search.BooleanQuery;
|
||||
import org.apache.lucene.search.FuzzyQuery;
|
||||
|
@ -128,7 +128,7 @@ public class TestPrecedenceQueryParser extends LuceneTestCase {
|
|||
a = new MockAnalyzer(random, MockTokenizer.SIMPLE, true);
|
||||
PrecedenceQueryParser qp = new PrecedenceQueryParser();
|
||||
qp.setAnalyzer(a);
|
||||
qp.setDefaultOperator(Operator.OR);
|
||||
qp.setDefaultOperator(StandardQueryConfigHandler.Operator.OR);
|
||||
return qp;
|
||||
}
|
||||
|
||||
|
@ -174,7 +174,7 @@ public class TestPrecedenceQueryParser extends LuceneTestCase {
|
|||
a = new MockAnalyzer(random, MockTokenizer.SIMPLE, true);
|
||||
PrecedenceQueryParser qp = new PrecedenceQueryParser();
|
||||
qp.setAnalyzer(a);
|
||||
qp.setDefaultOperator(Operator.AND);
|
||||
qp.setDefaultOperator(StandardQueryConfigHandler.Operator.AND);
|
||||
return qp.parse(query, "field");
|
||||
}
|
||||
|
||||
|
@ -234,11 +234,11 @@ public class TestPrecedenceQueryParser extends LuceneTestCase {
|
|||
PrecedenceQueryParser qp = new PrecedenceQueryParser();
|
||||
qp.setAnalyzer(new MockAnalyzer(random));
|
||||
// make sure OR is the default:
|
||||
assertEquals(Operator.OR, qp.getDefaultOperator());
|
||||
qp.setDefaultOperator(Operator.AND);
|
||||
assertEquals(Operator.AND, qp.getDefaultOperator());
|
||||
qp.setDefaultOperator(Operator.OR);
|
||||
assertEquals(Operator.OR, qp.getDefaultOperator());
|
||||
assertEquals(StandardQueryConfigHandler.Operator.OR, qp.getDefaultOperator());
|
||||
qp.setDefaultOperator(StandardQueryConfigHandler.Operator.AND);
|
||||
assertEquals(StandardQueryConfigHandler.Operator.AND, qp.getDefaultOperator());
|
||||
qp.setDefaultOperator(StandardQueryConfigHandler.Operator.OR);
|
||||
assertEquals(StandardQueryConfigHandler.Operator.OR, qp.getDefaultOperator());
|
||||
|
||||
assertQueryEquals("a OR !b", null, "a -b");
|
||||
assertQueryEquals("a OR ! b", null, "a -b");
|
||||
|
@ -607,7 +607,7 @@ public class TestPrecedenceQueryParser extends LuceneTestCase {
|
|||
query2 = parser.parse("A (-B +C)", "field");
|
||||
assertEquals(query1, query2);
|
||||
|
||||
parser.setDefaultOperator(Operator.AND);
|
||||
parser.setDefaultOperator(StandardQueryConfigHandler.Operator.AND);
|
||||
query1 = parser.parse("A AND B OR C AND D", "field");
|
||||
query2 = parser.parse("(A AND B) OR (C AND D)", "field");
|
||||
assertEquals(query1, query2);
|
||||
|
|
|
@ -17,6 +17,7 @@ package org.apache.lucene.queryParser.spans;
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import org.apache.lucene.queryParser.core.config.ConfigurationKey;
|
||||
import org.apache.lucene.queryParser.core.config.FieldConfig;
|
||||
import org.apache.lucene.queryParser.core.config.QueryConfigHandler;
|
||||
|
||||
|
@ -27,9 +28,11 @@ import org.apache.lucene.queryParser.core.config.QueryConfigHandler;
|
|||
* It does not return any configuration for a field in specific.
|
||||
*/
|
||||
public class SpansQueryConfigHandler extends QueryConfigHandler {
|
||||
|
||||
|
||||
final public static ConfigurationKey<String> UNIQUE_FIELD = ConfigurationKey.newInstance();
|
||||
|
||||
public SpansQueryConfigHandler() {
|
||||
addAttribute(UniqueFieldAttribute.class);
|
||||
// empty constructor
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -127,11 +127,10 @@ public class TestSpanQueryParser extends LuceneTestCase {
|
|||
return getSpanQuery("", query);
|
||||
}
|
||||
|
||||
public SpanQuery getSpanQuery(CharSequence uniqueField, CharSequence query)
|
||||
public SpanQuery getSpanQuery(String uniqueField, CharSequence query)
|
||||
throws QueryNodeException {
|
||||
UniqueFieldAttribute uniqueFieldAtt = this.spanQueryConfigHandler
|
||||
.getAttribute(UniqueFieldAttribute.class);
|
||||
uniqueFieldAtt.setUniqueField(uniqueField);
|
||||
|
||||
this.spanQueryConfigHandler.set(SpansQueryConfigHandler.UNIQUE_FIELD, uniqueField);
|
||||
|
||||
QueryNode queryTree = this.queryParser.parse(query, "defaultField");
|
||||
queryTree = this.spanProcessorPipeline.process(queryTree);
|
||||
|
|
|
@ -104,9 +104,7 @@ public class TestSpanQueryParserSimpleSample extends LuceneTestCase {
|
|||
// create a config handler with a attribute used in
|
||||
// UniqueFieldQueryNodeProcessor
|
||||
QueryConfigHandler spanQueryConfigHandler = new SpansQueryConfigHandler();
|
||||
UniqueFieldAttribute uniqueFieldAtt = spanQueryConfigHandler
|
||||
.getAttribute(UniqueFieldAttribute.class);
|
||||
uniqueFieldAtt.setUniqueField("index");
|
||||
spanQueryConfigHandler.set(SpansQueryConfigHandler.UNIQUE_FIELD, "index");
|
||||
|
||||
// set up the processor pipeline with the ConfigHandler
|
||||
// and create the pipeline for this simple demo
|
||||
|
|
|
@ -57,14 +57,12 @@ public class UniqueFieldQueryNodeProcessor extends QueryNodeProcessorImpl {
|
|||
"A config handler is expected by the processor UniqueFieldQueryNodeProcessor!");
|
||||
}
|
||||
|
||||
if (!queryConfig.hasAttribute(UniqueFieldAttribute.class)) {
|
||||
if (!queryConfig.has(SpansQueryConfigHandler.UNIQUE_FIELD)) {
|
||||
throw new IllegalArgumentException(
|
||||
"UniqueFieldAttribute should be defined in the config handler!");
|
||||
}
|
||||
|
||||
CharSequence uniqueField = queryConfig.getAttribute(
|
||||
UniqueFieldAttribute.class).getUniqueField();
|
||||
|
||||
String uniqueField = queryConfig.get(SpansQueryConfigHandler.UNIQUE_FIELD);
|
||||
fieldNode.setField(uniqueField);
|
||||
|
||||
}
|
||||
|
|
|
@ -28,7 +28,8 @@ import org.apache.lucene.analysis.tokenattributes.OffsetAttribute;
|
|||
import org.apache.lucene.analysis.tokenattributes.PositionIncrementAttribute;
|
||||
import org.apache.lucene.analysis.tokenattributes.TypeAttribute;
|
||||
import org.apache.lucene.queryParser.core.QueryNodeException;
|
||||
import org.apache.lucene.queryParser.standard.config.DefaultOperatorAttribute.Operator;
|
||||
import org.apache.lucene.queryParser.standard.config.StandardQueryConfigHandler;
|
||||
import org.apache.lucene.queryParser.standard.config.StandardQueryConfigHandler.Operator;
|
||||
import org.apache.lucene.util.LuceneTestCase;
|
||||
|
||||
/**
|
||||
|
@ -102,7 +103,7 @@ public class TestMultiAnalyzerQPHelper extends LuceneTestCase {
|
|||
qp.setDefaultPhraseSlop(0);
|
||||
|
||||
// non-default operator:
|
||||
qp.setDefaultOperator(Operator.AND);
|
||||
qp.setDefaultOperator(StandardQueryConfigHandler.Operator.AND);
|
||||
assertEquals("+(multi multi2) +foo", qp.parse("multi foo", "").toString());
|
||||
|
||||
}
|
||||
|
|
|
@ -28,7 +28,8 @@ import org.apache.lucene.document.Document;
|
|||
import org.apache.lucene.document.Field;
|
||||
import org.apache.lucene.index.IndexWriter;
|
||||
import org.apache.lucene.queryParser.core.QueryNodeException;
|
||||
import org.apache.lucene.queryParser.standard.config.DefaultOperatorAttribute.Operator;
|
||||
import org.apache.lucene.queryParser.standard.config.StandardQueryConfigHandler;
|
||||
import org.apache.lucene.queryParser.standard.config.StandardQueryConfigHandler.Operator;
|
||||
import org.apache.lucene.search.BooleanClause;
|
||||
import org.apache.lucene.search.IndexSearcher;
|
||||
import org.apache.lucene.search.Query;
|
||||
|
@ -133,7 +134,7 @@ public class TestMultiFieldQPHelper extends LuceneTestCase {
|
|||
assertEquals("(b:one t:one) f:two", q.toString());
|
||||
|
||||
// AND mode:
|
||||
mfqp.setDefaultOperator(Operator.AND);
|
||||
mfqp.setDefaultOperator(StandardQueryConfigHandler.Operator.AND);
|
||||
q = mfqp.parse("one two", null);
|
||||
assertEquals("+(b:one t:one) +(b:two t:two)", q.toString());
|
||||
q = mfqp.parse("\"aa bb cc\" \"dd ee\"", null);
|
||||
|
@ -329,7 +330,7 @@ public class TestMultiFieldQPHelper extends LuceneTestCase {
|
|||
|
||||
mfqp.setMultiFields(new String[] { "body" });
|
||||
mfqp.setAnalyzer(analyzer);
|
||||
mfqp.setDefaultOperator(Operator.AND);
|
||||
mfqp.setDefaultOperator(StandardQueryConfigHandler.Operator.AND);
|
||||
Query q = mfqp.parse("the footest", null);
|
||||
IndexSearcher is = new IndexSearcher(ramDir, true);
|
||||
ScoreDoc[] hits = is.search(q, null, 1000).scoreDocs;
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue