You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by jp...@apache.org on 2015/09/10 16:24:39 UTC

svn commit: r1702263 - in /lucene/dev/branches/branch_5x/lucene/highlighter/src: java/org/apache/lucene/search/vectorhighlight/FieldQuery.java test/org/apache/lucene/search/vectorhighlight/FieldQueryTest.java

Author: jpountz
Date: Thu Sep 10 14:24:38 2015
New Revision: 1702263

URL: http://svn.apache.org/r1702263
Log:
LUCENE-6590: Make sure the fast-vector-highlighter also handles boosts set via Query.setBoost.

Modified:
    lucene/dev/branches/branch_5x/lucene/highlighter/src/java/org/apache/lucene/search/vectorhighlight/FieldQuery.java
    lucene/dev/branches/branch_5x/lucene/highlighter/src/test/org/apache/lucene/search/vectorhighlight/FieldQueryTest.java

Modified: lucene/dev/branches/branch_5x/lucene/highlighter/src/java/org/apache/lucene/search/vectorhighlight/FieldQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/lucene/highlighter/src/java/org/apache/lucene/search/vectorhighlight/FieldQuery.java?rev=1702263&r1=1702262&r2=1702263&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/lucene/highlighter/src/java/org/apache/lucene/search/vectorhighlight/FieldQuery.java (original)
+++ lucene/dev/branches/branch_5x/lucene/highlighter/src/java/org/apache/lucene/search/vectorhighlight/FieldQuery.java Thu Sep 10 14:24:38 2015
@@ -96,10 +96,18 @@ public class FieldQuery {
   }
 
   void flatten( Query sourceQuery, IndexReader reader, Collection<Query> flatQueries, float boost ) throws IOException{
-    while (sourceQuery instanceof BoostQuery) {
-      BoostQuery bq = (BoostQuery) sourceQuery;
-      sourceQuery = bq.getQuery();
-      boost *= bq.getBoost();
+    while (true) {
+      if (sourceQuery.getBoost() != 1f) {
+        boost *= sourceQuery.getBoost();
+        sourceQuery = sourceQuery.clone();
+        sourceQuery.setBoost(1f);
+      } else if (sourceQuery instanceof BoostQuery) {
+        BoostQuery bq = (BoostQuery) sourceQuery;
+        sourceQuery = bq.getQuery();
+        boost *= bq.getBoost();
+      } else {
+        break;
+      }
     }
     if( sourceQuery instanceof BooleanQuery ){
       BooleanQuery bq = (BooleanQuery)sourceQuery;

Modified: lucene/dev/branches/branch_5x/lucene/highlighter/src/test/org/apache/lucene/search/vectorhighlight/FieldQueryTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/lucene/highlighter/src/test/org/apache/lucene/search/vectorhighlight/FieldQueryTest.java?rev=1702263&r1=1702262&r2=1702263&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/lucene/highlighter/src/test/org/apache/lucene/search/vectorhighlight/FieldQueryTest.java (original)
+++ lucene/dev/branches/branch_5x/lucene/highlighter/src/test/org/apache/lucene/search/vectorhighlight/FieldQueryTest.java Thu Sep 10 14:24:38 2015
@@ -53,6 +53,20 @@ public class FieldQueryTest extends Abst
     boost = usually() ? 1F : random().nextFloat() * 10000;
   }
 
+  public void testHandlesDeprecatedBoosts() throws Exception {
+    Query q1 = new TermQuery(new Term("foo", "bar"));
+    q1.setBoost(5);
+    Query q2 = new BoostQuery(new TermQuery(new Term("foo", "bar")), 5);
+
+    FieldQuery fq1 = new FieldQuery(q1, true, true);
+    FieldQuery fq2 = new FieldQuery(q2, true, true);
+    Set<Query> flatQueries1 = new HashSet<>();
+    Set<Query> flatQueries2 = new HashSet<>();
+    fq1.flatten(q1, reader, flatQueries1, 1f);
+    fq1.flatten(q2, reader, flatQueries2, 1f);
+    assertEquals(flatQueries1, flatQueries2);
+  }
+
   public void testFlattenBoolean() throws Exception {
     initBoost();
     BooleanQuery.Builder booleanQueryB = new BooleanQuery.Builder();