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());
+  }
 }