You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by rm...@apache.org on 2015/04/28 17:30:56 UTC

svn commit: r1676566 - in /lucene/dev/branches/branch_5x: ./ lucene/ lucene/core/ lucene/core/src/java/org/apache/lucene/search/ConjunctionScorer.java lucene/test-framework/ lucene/test-framework/src/java/org/apache/lucene/search/QueryUtils.java

Author: rmuir
Date: Tue Apr 28 15:30:56 2015
New Revision: 1676566

URL: http://svn.apache.org/r1676566
Log:
LUCENE-6452: score conjunctions consistently with BooleanScorer

Modified:
    lucene/dev/branches/branch_5x/   (props changed)
    lucene/dev/branches/branch_5x/lucene/   (props changed)
    lucene/dev/branches/branch_5x/lucene/core/   (props changed)
    lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/search/ConjunctionScorer.java
    lucene/dev/branches/branch_5x/lucene/test-framework/   (props changed)
    lucene/dev/branches/branch_5x/lucene/test-framework/src/java/org/apache/lucene/search/QueryUtils.java

Modified: lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/search/ConjunctionScorer.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/search/ConjunctionScorer.java?rev=1676566&r1=1676565&r2=1676566&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/search/ConjunctionScorer.java (original)
+++ lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/search/ConjunctionScorer.java Tue Apr 28 15:30:56 2015
@@ -64,12 +64,11 @@ class ConjunctionScorer extends Scorer {
 
   @Override
   public float score() throws IOException {
-    // TODO: sum into a double and cast to float if we ever send required clauses to BS1
-    float sum = 0.0f;
+    double sum = 0.0d;
     for (Scorer scorer : scorers) {
       sum += scorer.score();
     }
-    return sum * coord;
+    return coord * (float)sum;
   }
 
   @Override

Modified: lucene/dev/branches/branch_5x/lucene/test-framework/src/java/org/apache/lucene/search/QueryUtils.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/lucene/test-framework/src/java/org/apache/lucene/search/QueryUtils.java?rev=1676566&r1=1676565&r2=1676566&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/lucene/test-framework/src/java/org/apache/lucene/search/QueryUtils.java (original)
+++ lucene/dev/branches/branch_5x/lucene/test-framework/src/java/org/apache/lucene/search/QueryUtils.java Tue Apr 28 15:30:56 2015
@@ -42,6 +42,10 @@ import org.apache.lucene.index.Terms;
 import org.apache.lucene.util.Bits;
 import org.apache.lucene.util.LuceneTestCase;
 
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertFalse;
+import static junit.framework.Assert.assertTrue;
+
 /**
  * Utility class for sanity-checking queries.
  */
@@ -82,21 +86,21 @@ public class QueryUtils {
     checkUnequal(q, whacky);
     
     // null test
-    Assert.assertFalse(q.equals(null));
+    assertFalse(q.equals(null));
   }
 
   public static void checkEqual(Query q1, Query q2) {
-    Assert.assertEquals(q1, q2);
-    Assert.assertEquals(q1.hashCode(), q2.hashCode());
+    assertEquals(q1, q2);
+    assertEquals(q1.hashCode(), q2.hashCode());
   }
 
   public static void checkUnequal(Query q1, Query q2) {
-    Assert.assertFalse(q1 + " equal to " + q2, q1.equals(q2));
-    Assert.assertFalse(q2 + " equal to " + q1, q2.equals(q1));
+    assertFalse(q1 + " equal to " + q2, q1.equals(q2));
+    assertFalse(q2 + " equal to " + q1, q2.equals(q1));
 
     // possible this test can fail on a hash collision... if that
     // happens, please change test to use a different example.
-    Assert.assertTrue(q1.hashCode() != q2.hashCode());
+    assertTrue(q1.hashCode() != q2.hashCode());
   }
   
   /** deep check that explanations of a query 'score' correctly */
@@ -359,24 +363,36 @@ public class QueryUtils {
               float scorerScore2 = scorer.score();
               float scoreDiff = Math.abs(score - scorerScore);
               float scorerDiff = Math.abs(scorerScore2 - scorerScore);
-              if (!more || doc != scorerDoc || scoreDiff > maxDiff
-                  || scorerDiff > maxDiff) {
-                StringBuilder sbord = new StringBuilder();
-                for (int i = 0; i < order.length; i++)
-                  sbord.append(order[i] == skip_op ? " skip()" : " next()");
-                throw new RuntimeException("ERROR matching docs:" + "\n\t"
-                    + (doc != scorerDoc ? "--> " : "") + "doc=" + doc + ", scorerDoc=" + scorerDoc
-                    + "\n\t" + (!more ? "--> " : "") + "tscorer.more=" + more
-                    + "\n\t" + (scoreDiff > maxDiff ? "--> " : "")
-                    + "scorerScore=" + scorerScore + " scoreDiff=" + scoreDiff
-                    + " maxDiff=" + maxDiff + "\n\t"
-                    + (scorerDiff > maxDiff ? "--> " : "") + "scorerScore2="
-                    + scorerScore2 + " scorerDiff=" + scorerDiff
-                    + "\n\thitCollector.doc=" + doc + " score=" + score
-                    + "\n\t Scorer=" + scorer + "\n\t Query=" + q + "  "
-                    + q.getClass().getName() + "\n\t Searcher=" + s
-                    + "\n\t Order=" + sbord + "\n\t Op="
-                    + (op == skip_op ? " skip()" : " next()"));
+
+              boolean success = false;
+              try {
+                assertTrue(more);
+                assertEquals("scorerDoc=" + scorerDoc + ",doc=" + doc, scorerDoc, doc);
+                assertTrue("score=" + score + ", scorerScore=" + scorerScore, scoreDiff <= maxDiff);
+                assertTrue("scorerScorer=" + scorerScore + ", scorerScore2=" + scorerScore2, scorerDiff <= maxDiff);
+                success = true;
+              } finally {
+                if (!success) {
+                  if (LuceneTestCase.VERBOSE) {
+                    StringBuilder sbord = new StringBuilder();
+                    for (int i = 0; i < order.length; i++) {
+                      sbord.append(order[i] == skip_op ? " skip()" : " next()");
+                    }
+                    System.out.println("ERROR matching docs:" + "\n\t"
+                        + (doc != scorerDoc ? "--> " : "") + "doc=" + doc + ", scorerDoc=" + scorerDoc
+                        + "\n\t" + (!more ? "--> " : "") + "tscorer.more=" + more
+                        + "\n\t" + (scoreDiff > maxDiff ? "--> " : "")
+                        + "scorerScore=" + scorerScore + " scoreDiff=" + scoreDiff
+                        + " maxDiff=" + maxDiff + "\n\t"
+                        + (scorerDiff > maxDiff ? "--> " : "") + "scorerScore2="
+                        + scorerScore2 + " scorerDiff=" + scorerDiff
+                        + "\n\thitCollector.doc=" + doc + " score=" + score
+                        + "\n\t Scorer=" + scorer + "\n\t Query=" + q + "  "
+                        + q.getClass().getName() + "\n\t Searcher=" + s
+                        + "\n\t Order=" + sbord + "\n\t Op="
+                        + (op == skip_op ? " skip()" : " next()"));
+                  }
+                }
               }
             } catch (IOException e) {
               throw new RuntimeException(e);