You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ge...@apache.org on 2025/10/10 15:18:05 UTC

(lucene) 01/02: Use BulkSimScorer on MultiNormsLeafSimScorer (#15101)

This is an automated email from the ASF dual-hosted git repository.

gesong pushed a commit to branch branch_10x
in repository https://gitbox.apache.org/repos/asf/lucene.git

commit d0826192b34f673e34ae467e6351daef12292b30
Author: Samuel.G <so...@gmail.com>
AuthorDate: Fri Aug 22 23:25:33 2025 +0900

    Use BulkSimScorer on MultiNormsLeafSimScorer (#15101)
---
 .../org/apache/lucene/search/MultiNormsLeafSimScorer.java     | 11 +++++------
 1 file changed, 5 insertions(+), 6 deletions(-)

diff --git a/lucene/core/src/java/org/apache/lucene/search/MultiNormsLeafSimScorer.java b/lucene/core/src/java/org/apache/lucene/search/MultiNormsLeafSimScorer.java
index 5c797ad881c..65609921bc9 100644
--- a/lucene/core/src/java/org/apache/lucene/search/MultiNormsLeafSimScorer.java
+++ b/lucene/core/src/java/org/apache/lucene/search/MultiNormsLeafSimScorer.java
@@ -26,6 +26,7 @@ import java.util.Set;
 import org.apache.lucene.index.LeafReader;
 import org.apache.lucene.index.NumericDocValues;
 import org.apache.lucene.search.CombinedFieldQuery.FieldAndWeight;
+import org.apache.lucene.search.similarities.Similarity.BulkSimScorer;
 import org.apache.lucene.search.similarities.Similarity.SimScorer;
 import org.apache.lucene.util.ArrayUtil;
 import org.apache.lucene.util.LongsRef;
@@ -49,6 +50,7 @@ final class MultiNormsLeafSimScorer {
   }
 
   private final SimScorer scorer;
+  private final BulkSimScorer bulkScorer;
   private final NumericDocValues norms;
   private long[] normValues = LongsRef.EMPTY_LONGS;
 
@@ -60,6 +62,7 @@ final class MultiNormsLeafSimScorer {
       boolean needsScores)
       throws IOException {
     this.scorer = Objects.requireNonNull(scorer);
+    this.bulkScorer = scorer.asBulkSimScorer();
     if (needsScores) {
       final List<NumericDocValues> normsList = new ArrayList<>();
       final List<Float> weightList = new ArrayList<>();
@@ -123,15 +126,11 @@ final class MultiNormsLeafSimScorer {
    * @see SimScorer#score(float, long)
    */
   public void scoreRange(DocAndFloatFeatureBuffer buffer) throws IOException {
-    if (normValues.length < buffer.size) {
-      normValues = ArrayUtil.growNoCopy(normValues, buffer.size);
-    }
+    normValues = ArrayUtil.growNoCopy(normValues, buffer.size);
     for (int i = 0; i < buffer.size; i++) {
       normValues[i] = getNormValue(buffer.docs[i]);
     }
-    for (int i = 0; i < buffer.size; i++) {
-      buffer.features[i] = scorer.score(buffer.features[i], normValues[i]);
-    }
+    bulkScorer.score(buffer.size, buffer.features, normValues, buffer.features);
   }
 
   /**