lucene-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From mikemcc...@apache.org
Subject svn commit: r1021340 - /lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/DisjunctionMaxScorer.java
Date Mon, 11 Oct 2010 13:25:21 GMT
Author: mikemccand
Date: Mon Oct 11 13:25:20 2010
New Revision: 1021340

URL: http://svn.apache.org/viewvc?rev=1021340&view=rev
Log:
LUCENE-2695: don't create 2 arrays per .score() call

Modified:
    lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/DisjunctionMaxScorer.java

Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/DisjunctionMaxScorer.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/DisjunctionMaxScorer.java?rev=1021340&r1=1021339&r2=1021340&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/DisjunctionMaxScorer.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/DisjunctionMaxScorer.java Mon
Oct 11 13:25:20 2010
@@ -33,6 +33,10 @@ class DisjunctionMaxScorer extends Score
   private final float tieBreakerMultiplier;
   private int doc = -1;
 
+  /* Used when scoring currently matching doc. */
+  private float scoreSum;
+  private float scoreMax;
+
   /**
    * Creates a new instance of DisjunctionMaxScorer
    * 
@@ -90,21 +94,21 @@ class DisjunctionMaxScorer extends Score
   @Override
   public float score() throws IOException {
     int doc = subScorers[0].docID();
-    float[] sum = { subScorers[0].score() }, max = { sum[0] };
+    scoreSum = scoreMax = subScorers[0].score();
     int size = numScorers;
-    scoreAll(1, size, doc, sum, max);
-    scoreAll(2, size, doc, sum, max);
-    return max[0] + (sum[0] - max[0]) * tieBreakerMultiplier;
+    scoreAll(1, size, doc);
+    scoreAll(2, size, doc);
+    return scoreMax + (scoreSum - scoreMax) * tieBreakerMultiplier;
   }
 
   // Recursively iterate all subScorers that generated last doc computing sum and max
-  private void scoreAll(int root, int size, int doc, float[] sum, float[] max) throws IOException
{
+  private void scoreAll(int root, int size, int doc) throws IOException {
     if (root < size && subScorers[root].docID() == doc) {
       float sub = subScorers[root].score();
-      sum[0] += sub;
-      max[0] = Math.max(max[0], sub);
-      scoreAll((root<<1)+1, size, doc, sum, max);
-      scoreAll((root<<1)+2, size, doc, sum, max);
+      scoreSum += sub;
+      scoreMax = Math.max(scoreMax, sub);
+      scoreAll((root<<1)+1, size, doc);
+      scoreAll((root<<1)+2, size, doc);
     }
   }
 



Mime
View raw message