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/08 10:24:16 UTC

svn commit: r1701742 - in /lucene/dev/trunk/lucene/core/src: java/org/apache/lucene/search/BooleanWeight.java java/org/apache/lucene/search/DisjunctionMaxQuery.java test/org/apache/lucene/search/TestSimpleSearchEquivalence.java

Author: jpountz
Date: Tue Sep  8 08:24:16 2015
New Revision: 1701742

URL: http://svn.apache.org/r1701742
Log:
LUCENE-6590: Fix BooleanQuery to not propagate query boosts twice.

Modified:
    lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/search/BooleanWeight.java
    lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/search/DisjunctionMaxQuery.java
    lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestSimpleSearchEquivalence.java

Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/search/BooleanWeight.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/search/BooleanWeight.java?rev=1701742&r1=1701741&r2=1701742&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/search/BooleanWeight.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/search/BooleanWeight.java Tue Sep  8 08:24:16 2015
@@ -43,7 +43,6 @@ final class BooleanWeight extends Weight
   final boolean disableCoord;
   final boolean needsScores;
   final float coords[];
-  float boost = 1f;
 
   BooleanWeight(BooleanQuery query, IndexSearcher searcher, boolean needsScores, boolean disableCoord) throws IOException {
     super(query);
@@ -106,8 +105,6 @@ final class BooleanWeight extends Weight
       i += 1;
     }
 
-    sum *= boost * boost; // boost each sub-weight
-
     return sum ;
   }
 
@@ -129,7 +126,6 @@ final class BooleanWeight extends Weight
 
   @Override
   public void normalize(float norm, float boost) {
-    this.boost = boost;
     for (Weight w : weights) {
       // normalize all clauses, (even if non-scoring in case of side affects)
       w.normalize(norm, boost);

Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/search/DisjunctionMaxQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/search/DisjunctionMaxQuery.java?rev=1701742&r1=1701741&r2=1701742&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/search/DisjunctionMaxQuery.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/search/DisjunctionMaxQuery.java Tue Sep  8 08:24:16 2015
@@ -118,7 +118,6 @@ public final class DisjunctionMaxQuery e
     /** The Weights for our subqueries, in 1-1 correspondence with disjuncts */
     protected final ArrayList<Weight> weights = new ArrayList<>();  // The Weight's for our subqueries, in 1-1 correspondence with disjuncts
     private final boolean needsScores;
-    private float boost;
 
     /** Construct the Weight for this Query searched by searcher.  Recursively construct subquery weights. */
     public DisjunctionMaxWeight(IndexSearcher searcher, boolean needsScores) throws IOException {
@@ -127,7 +126,6 @@ public final class DisjunctionMaxQuery e
         weights.add(searcher.createWeight(disjunctQuery, needsScores));
       }
       this.needsScores = needsScores;
-      this.boost = 1f;
     }
 
     @Override
@@ -147,13 +145,12 @@ public final class DisjunctionMaxQuery e
         max = Math.max(max, sub);
         
       }
-      return (((sum - max) * tieBreakerMultiplier * tieBreakerMultiplier) + max) * boost * boost;
+      return (((sum - max) * tieBreakerMultiplier * tieBreakerMultiplier) + max);
     }
 
     /** Apply the computed normalization factor to our subqueries */
     @Override
     public void normalize(float norm, float boost) {
-      this.boost = boost;
       for (Weight wt : weights) {
         wt.normalize(norm, boost);
       }

Modified: lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestSimpleSearchEquivalence.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestSimpleSearchEquivalence.java?rev=1701742&r1=1701741&r2=1701742&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestSimpleSearchEquivalence.java (original)
+++ lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestSimpleSearchEquivalence.java Tue Sep  8 08:24:16 2015
@@ -214,4 +214,20 @@ public class TestSimpleSearchEquivalence
 
     assertSameScores(q1, q2);
   }
+
+  public void testBooleanBoostPropagation() throws Exception {
+    float boost1 = random().nextFloat();
+    Query tq = new BoostQuery(new TermQuery(randomTerm()), boost1);
+
+    float boost2 = random().nextFloat();
+    // Applying boost2 over the term or boolean query should have the same effect
+    Query q1 = new BoostQuery(tq, boost2);
+    Query q2 = new BooleanQuery.Builder()
+      .add(tq, Occur.MUST)
+      .add(tq, Occur.FILTER)
+      .build();
+    q2 = new BoostQuery(q2, boost2);
+
+    assertSameScores(q1, q2);
+  }
 }