You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-commits@lucene.apache.org by eh...@apache.org on 2005/07/22 03:48:36 UTC

svn commit: r220228 - /lucene/java/trunk/src/java/org/apache/lucene/search/BooleanScorer2.java

Author: ehatcher
Date: Thu Jul 21 18:48:32 2005
New Revision: 220228

URL: http://svn.apache.org/viewcvs?rev=220228&view=rev
Log:
#35823 - Paul Elschots fix for BooleanScorer2 causing ArrayIndexOutOfBoundsException

Modified:
    lucene/java/trunk/src/java/org/apache/lucene/search/BooleanScorer2.java

Modified: lucene/java/trunk/src/java/org/apache/lucene/search/BooleanScorer2.java
URL: http://svn.apache.org/viewcvs/lucene/java/trunk/src/java/org/apache/lucene/search/BooleanScorer2.java?rev=220228&r1=220227&r2=220228&view=diff
==============================================================================
--- lucene/java/trunk/src/java/org/apache/lucene/search/BooleanScorer2.java (original)
+++ lucene/java/trunk/src/java/org/apache/lucene/search/BooleanScorer2.java Thu Jul 21 18:48:32 2005
@@ -99,12 +99,17 @@
   /** Count a scorer as a single match. */
   private class SingleMatchScorer extends Scorer {
     private Scorer scorer;
+    private int lastScoredDoc = -1;
+
     SingleMatchScorer(Scorer scorer) {
       super(scorer.getSimilarity());
       this.scorer = scorer;
     }
     public float score() throws IOException {
-      coordinator.nrMatchers++;
+      if (doc() > lastScoredDoc) {
+        lastScoredDoc = doc();
+        coordinator.nrMatchers++;
+      }
       return scorer.score();
     }
     public int doc() {
@@ -125,8 +130,12 @@
   // each scorer from the list counted as a single matcher
   {
     return new DisjunctionSumScorer(scorers) {
+      private int lastScoredDoc = -1;
       public float score() throws IOException {
-        coordinator.nrMatchers += nrMatchers;
+        if (doc() > lastScoredDoc) {
+          lastScoredDoc = doc();
+          coordinator.nrMatchers += super.nrMatchers;
+        }
         return super.score();
       }
     };
@@ -139,8 +148,13 @@
   {
     final int requiredNrMatchers = requiredScorers.size();
     ConjunctionScorer cs = new ConjunctionScorer(defaultSimilarity) {
+      private int lastScoredDoc = -1;
+
       public float score() throws IOException {
-        coordinator.nrMatchers += requiredNrMatchers;
+        if (doc() > lastScoredDoc) {
+          lastScoredDoc = doc();
+          coordinator.nrMatchers += requiredNrMatchers;
+        }
         // All scorers match, so defaultSimilarity super.score() always has 1 as
         // the coordination factor.
         // Therefore the sum of the scores of the requiredScorers