You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by sa...@apache.org on 2016/10/04 15:08:57 UTC
[2/5] lucene-solr:branch_6x: LUCENE-7472:
MultiFieldQueryParser.getFieldQuery() drops queries that are neither
BooleanQuery nor TermQuery.
LUCENE-7472: MultiFieldQueryParser.getFieldQuery() drops queries that are neither BooleanQuery nor TermQuery.
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/c398949d
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/c398949d
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/c398949d
Branch: refs/heads/branch_6x
Commit: c398949d3788676bbf8b3f1ae7e819f851d20767
Parents: ffef46e
Author: Steve Rowe <sa...@apache.org>
Authored: Tue Oct 4 10:51:00 2016 -0400
Committer: Steve Rowe <sa...@apache.org>
Committed: Tue Oct 4 10:51:42 2016 -0400
----------------------------------------------------------------------
lucene/CHANGES.txt | 3 +++
.../classic/MultiFieldQueryParser.java | 6 +++---
.../classic/TestMultiFieldQueryParser.java | 22 ++++++++++++++++++++
3 files changed, 28 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c398949d/lucene/CHANGES.txt
----------------------------------------------------------------------
diff --git a/lucene/CHANGES.txt b/lucene/CHANGES.txt
index a240a8e..44b8536 100644
--- a/lucene/CHANGES.txt
+++ b/lucene/CHANGES.txt
@@ -11,6 +11,9 @@ New Features
Bug Fixes
+* LUCENE-7472: MultiFieldQueryParser.getFieldQuery() drops queries that are
+ neither BooleanQuery nor TermQuery. (Steve Rowe)
+
Improvements
* LUCENE-7439: FuzzyQuery now matches all terms within the specified
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c398949d/lucene/queryparser/src/java/org/apache/lucene/queryparser/classic/MultiFieldQueryParser.java
----------------------------------------------------------------------
diff --git a/lucene/queryparser/src/java/org/apache/lucene/queryparser/classic/MultiFieldQueryParser.java b/lucene/queryparser/src/java/org/apache/lucene/queryparser/classic/MultiFieldQueryParser.java
index 69a7559..2b48930 100644
--- a/lucene/queryparser/src/java/org/apache/lucene/queryparser/classic/MultiFieldQueryParser.java
+++ b/lucene/queryparser/src/java/org/apache/lucene/queryparser/classic/MultiFieldQueryParser.java
@@ -154,10 +154,10 @@ public class MultiFieldQueryParser extends QueryParser
for (int i = 0; i < fields.length; i++) {
Query q = super.getFieldQuery(fields[i], queryText, quoted);
if (q != null) {
- if (q instanceof TermQuery) {
- maxTerms = Math.max(1, maxTerms);
- } else if (q instanceof BooleanQuery) {
+ if (q instanceof BooleanQuery) {
maxTerms = Math.max(maxTerms, ((BooleanQuery)q).clauses().size());
+ } else {
+ maxTerms = Math.max(1, maxTerms);
}
fieldQueries[i] = q;
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/c398949d/lucene/queryparser/src/test/org/apache/lucene/queryparser/classic/TestMultiFieldQueryParser.java
----------------------------------------------------------------------
diff --git a/lucene/queryparser/src/test/org/apache/lucene/queryparser/classic/TestMultiFieldQueryParser.java b/lucene/queryparser/src/test/org/apache/lucene/queryparser/classic/TestMultiFieldQueryParser.java
index d4d8b93..72bd2a1 100644
--- a/lucene/queryparser/src/test/org/apache/lucene/queryparser/classic/TestMultiFieldQueryParser.java
+++ b/lucene/queryparser/src/test/org/apache/lucene/queryparser/classic/TestMultiFieldQueryParser.java
@@ -28,6 +28,7 @@ import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.Term;
+import org.apache.lucene.queryparser.util.QueryParserTestBase;
import org.apache.lucene.search.BooleanClause.Occur;
import org.apache.lucene.search.BooleanClause;
import org.apache.lucene.search.BooleanQuery;
@@ -332,4 +333,25 @@ public class TestMultiFieldQueryParser extends LuceneTestCase {
assertEquals(bq.build(), mfqp.parse("/[a-z][123]/"));
}
+ /** whitespace+lowercase analyzer with synonyms (dogs,dog) and (guinea pig,cavy) */
+ private class MockSynonymAnalyzer extends Analyzer {
+ @Override
+ public TokenStreamComponents createComponents(String fieldName) {
+ Tokenizer tokenizer = new MockTokenizer(MockTokenizer.WHITESPACE, true);
+ return new TokenStreamComponents(tokenizer, new MockSynonymFilter(tokenizer));
+ }
+ }
+
+ public void testSynonyms() throws ParseException {
+ String[] fields = {"b", "t"};
+ MultiFieldQueryParser parser = new MultiFieldQueryParser(fields, new MockSynonymAnalyzer());
+ Query q = parser.parse("dogs");
+ assertEquals("Synonym(b:dog b:dogs) Synonym(t:dog t:dogs)", q.toString());
+ q = parser.parse("guinea pig");
+ assertFalse(parser.getSplitOnWhitespace());
+ assertEquals("(Synonym(b:cavy b:guinea) Synonym(t:cavy t:guinea)) (b:pig t:pig)", q.toString());
+ parser.setSplitOnWhitespace(true);
+ q = parser.parse("guinea pig");
+ assertEquals("(b:guinea t:guinea) (b:pig t:pig)", q.toString());
+ }
}