From c34b6537f717e7282db4dfaba18548d93ed157bb Mon Sep 17 00:00:00 2001 From: "gesong.samuel" Date: Wed, 4 Jun 2025 09:43:47 +0800 Subject: [PATCH 1/4] implement ConstantScoreScorer.nextDocsAndScores --- .../lucene/search/ConstantScoreScorer.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/lucene/core/src/java/org/apache/lucene/search/ConstantScoreScorer.java b/lucene/core/src/java/org/apache/lucene/search/ConstantScoreScorer.java index 7407edaaf548..51e35d65179f 100644 --- a/lucene/core/src/java/org/apache/lucene/search/ConstantScoreScorer.java +++ b/lucene/core/src/java/org/apache/lucene/search/ConstantScoreScorer.java @@ -16,7 +16,10 @@ */ package org.apache.lucene.search; +import org.apache.lucene.util.Bits; + import java.io.IOException; +import java.util.Arrays; /** * A constant-scoring {@link Scorer}. @@ -144,4 +147,20 @@ public int docID() { public float score() throws IOException { return score; } + + @Override + public void nextDocsAndScores(int upTo, Bits liveDocs, DocAndFloatFeatureBuffer buffer) throws IOException { + int batchSize = 16; // arbitrary + buffer.growNoCopy(batchSize); + int size = 0; + DocIdSetIterator iterator = iterator(); + for (int doc = iterator.docID(); doc < upTo && size < batchSize; doc = iterator.nextDoc()) { + if (liveDocs == null || liveDocs.get(doc)) { + buffer.docs[size] = doc; + ++size; + } + } + Arrays.fill(buffer.features, 0, size, score); + buffer.size = size; + } } From 1c3d522bf04398b1c17e57521a47116f5213d30a Mon Sep 17 00:00:00 2001 From: "gesong.samuel" Date: Thu, 12 Jun 2025 19:49:31 +0800 Subject: [PATCH 2/4] fix batch size --- .../src/java/org/apache/lucene/search/ConstantScoreScorer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lucene/core/src/java/org/apache/lucene/search/ConstantScoreScorer.java b/lucene/core/src/java/org/apache/lucene/search/ConstantScoreScorer.java index 51e35d65179f..b90a5b6a613b 100644 --- a/lucene/core/src/java/org/apache/lucene/search/ConstantScoreScorer.java +++ b/lucene/core/src/java/org/apache/lucene/search/ConstantScoreScorer.java @@ -150,7 +150,7 @@ public float score() throws IOException { @Override public void nextDocsAndScores(int upTo, Bits liveDocs, DocAndFloatFeatureBuffer buffer) throws IOException { - int batchSize = 16; // arbitrary + int batchSize = 64; buffer.growNoCopy(batchSize); int size = 0; DocIdSetIterator iterator = iterator(); From ffd97fd5c5f72733d71717c7213869011f9b9825 Mon Sep 17 00:00:00 2001 From: "gesong.samuel" Date: Thu, 12 Jun 2025 19:55:36 +0800 Subject: [PATCH 3/4] add changes --- lucene/CHANGES.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lucene/CHANGES.txt b/lucene/CHANGES.txt index 1113c7b5e8e5..8e2d4031629e 100644 --- a/lucene/CHANGES.txt +++ b/lucene/CHANGES.txt @@ -150,6 +150,8 @@ Optimizations * GITHUB#14753: Implement IndexedDISI#docIDRunEnd. (Ge Song) +* GITHUB#14772: Implement ConstantScoreScorer#nextDocsAndScores. (Ge Song) + Bug Fixes --------------------- * GITHUB#14654: ValueSource.fromDoubleValuesSource(dvs).getSortField() would throw errors when From bfbac3ab40c3bbe556131a3d646e25092b4c5bbe Mon Sep 17 00:00:00 2001 From: "gesong.samuel" Date: Fri, 13 Jun 2025 21:33:47 +0800 Subject: [PATCH 4/4] tidy --- .../org/apache/lucene/search/ConstantScoreScorer.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lucene/core/src/java/org/apache/lucene/search/ConstantScoreScorer.java b/lucene/core/src/java/org/apache/lucene/search/ConstantScoreScorer.java index b90a5b6a613b..4ae8ef09017f 100644 --- a/lucene/core/src/java/org/apache/lucene/search/ConstantScoreScorer.java +++ b/lucene/core/src/java/org/apache/lucene/search/ConstantScoreScorer.java @@ -16,10 +16,9 @@ */ package org.apache.lucene.search; -import org.apache.lucene.util.Bits; - import java.io.IOException; import java.util.Arrays; +import org.apache.lucene.util.Bits; /** * A constant-scoring {@link Scorer}. @@ -149,8 +148,9 @@ public float score() throws IOException { } @Override - public void nextDocsAndScores(int upTo, Bits liveDocs, DocAndFloatFeatureBuffer buffer) throws IOException { - int batchSize = 64; + public void nextDocsAndScores(int upTo, Bits liveDocs, DocAndFloatFeatureBuffer buffer) + throws IOException { + int batchSize = 64; buffer.growNoCopy(batchSize); int size = 0; DocIdSetIterator iterator = iterator();