diff --git a/lucene/CHANGES.txt b/lucene/CHANGES.txt index 9a00afb326ea..c2e1d707242f 100644 --- a/lucene/CHANGES.txt +++ b/lucene/CHANGES.txt @@ -324,6 +324,7 @@ Improvements Optimizations --------------------- + * GITHUG#16280: Single-pass writeString fast path for short strings in ByteBuffersDataOutput (neoremind) * GITHUB#16146: Speed up no-score filtered-optional Boolean queries by routing dense conjunctions with cached FixedBitSet filters @@ -352,6 +353,12 @@ Optimizations * GITHUB#16370: Sort two-phase iterators by matchCost in DenseConjunctionBulkScorer. (Alan Woodward) +* GITHUB#16294: Route constant-score doc-values queries through + ConstantScoreScorerSupplier so they can benefit from batch scoring. + Affects BinaryRangeFieldRangeQuery, LatLonDocValuesBoxQuery, + LatLonDocValuesQuery, XYDocValuesPointInGeometryQuery, and + SortedNumericDocValuesSetQuery. (Costin Leau) + Bug Fixes --------------------- * GITHUB#16350: Disable bulk-scoring in monitor queries. (Alan Woodward) diff --git a/lucene/core/src/java/org/apache/lucene/document/BinaryRangeFieldRangeQuery.java b/lucene/core/src/java/org/apache/lucene/document/BinaryRangeFieldRangeQuery.java index 140227746f0d..f7d5d19ea894 100644 --- a/lucene/core/src/java/org/apache/lucene/document/BinaryRangeFieldRangeQuery.java +++ b/lucene/core/src/java/org/apache/lucene/document/BinaryRangeFieldRangeQuery.java @@ -23,7 +23,7 @@ import org.apache.lucene.index.DocValues; import org.apache.lucene.index.LeafReader; import org.apache.lucene.index.LeafReaderContext; -import org.apache.lucene.search.ConstantScoreScorer; +import org.apache.lucene.search.ConstantScoreScorerSupplier; import org.apache.lucene.search.ConstantScoreWeight; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.Query; @@ -135,8 +135,11 @@ public float matchCost() { } }; - final var scorer = new ConstantScoreScorer(score(), scoreMode, iterator); - return new DefaultScorerSupplier(scorer); + return ConstantScoreScorerSupplier.fromIterator( + TwoPhaseIterator.asDocIdSetIterator(iterator), + score(), + scoreMode, + context.reader().maxDoc()); } @Override diff --git a/lucene/core/src/java/org/apache/lucene/document/LatLonDocValuesBoxQuery.java b/lucene/core/src/java/org/apache/lucene/document/LatLonDocValuesBoxQuery.java index ac01e4c74f33..d6593fda51eb 100644 --- a/lucene/core/src/java/org/apache/lucene/document/LatLonDocValuesBoxQuery.java +++ b/lucene/core/src/java/org/apache/lucene/document/LatLonDocValuesBoxQuery.java @@ -22,7 +22,7 @@ import org.apache.lucene.index.DocValues; import org.apache.lucene.index.LeafReaderContext; import org.apache.lucene.index.SortedNumericDocValues; -import org.apache.lucene.search.ConstantScoreScorer; +import org.apache.lucene.search.ConstantScoreScorerSupplier; import org.apache.lucene.search.ConstantScoreWeight; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.Query; @@ -153,8 +153,11 @@ public float matchCost() { return 5; // 5 comparisons } }; - final var scorer = new ConstantScoreScorer(boost, scoreMode, iterator); - return new DefaultScorerSupplier(scorer); + return ConstantScoreScorerSupplier.fromIterator( + TwoPhaseIterator.asDocIdSetIterator(iterator), + boost, + scoreMode, + context.reader().maxDoc()); } @Override diff --git a/lucene/core/src/java/org/apache/lucene/document/LatLonDocValuesQuery.java b/lucene/core/src/java/org/apache/lucene/document/LatLonDocValuesQuery.java index 45a7bc0eb521..65fc6b664d14 100644 --- a/lucene/core/src/java/org/apache/lucene/document/LatLonDocValuesQuery.java +++ b/lucene/core/src/java/org/apache/lucene/document/LatLonDocValuesQuery.java @@ -29,7 +29,7 @@ import org.apache.lucene.index.DocValues; import org.apache.lucene.index.LeafReaderContext; import org.apache.lucene.index.SortedNumericDocValues; -import org.apache.lucene.search.ConstantScoreScorer; +import org.apache.lucene.search.ConstantScoreScorerSupplier; import org.apache.lucene.search.ConstantScoreWeight; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.Query; @@ -158,8 +158,11 @@ public ScorerSupplier scorerSupplier(LeafReaderContext context) throws IOExcepti throw new IllegalArgumentException( "Invalid query relationship:[" + queryRelation + "]"); } - final var scorer = new ConstantScoreScorer(boost, scoreMode, iterator); - return new DefaultScorerSupplier(scorer); + return ConstantScoreScorerSupplier.fromIterator( + TwoPhaseIterator.asDocIdSetIterator(iterator), + boost, + scoreMode, + context.reader().maxDoc()); } @Override diff --git a/lucene/core/src/java/org/apache/lucene/document/SortedNumericDocValuesSetQuery.java b/lucene/core/src/java/org/apache/lucene/document/SortedNumericDocValuesSetQuery.java index 53966bb02c3d..7b7028d5be5b 100644 --- a/lucene/core/src/java/org/apache/lucene/document/SortedNumericDocValuesSetQuery.java +++ b/lucene/core/src/java/org/apache/lucene/document/SortedNumericDocValuesSetQuery.java @@ -23,7 +23,7 @@ import org.apache.lucene.index.LeafReaderContext; import org.apache.lucene.index.NumericDocValues; import org.apache.lucene.index.SortedNumericDocValues; -import org.apache.lucene.search.ConstantScoreScorer; +import org.apache.lucene.search.ConstantScoreScorerSupplier; import org.apache.lucene.search.ConstantScoreWeight; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.MatchNoDocsQuery; @@ -150,8 +150,11 @@ public float matchCost() { } }; } - final var scorer = new ConstantScoreScorer(score(), scoreMode, iterator); - return new DefaultScorerSupplier(scorer); + return ConstantScoreScorerSupplier.fromIterator( + TwoPhaseIterator.asDocIdSetIterator(iterator), + score(), + scoreMode, + context.reader().maxDoc()); } }; } diff --git a/lucene/core/src/java/org/apache/lucene/document/XYDocValuesPointInGeometryQuery.java b/lucene/core/src/java/org/apache/lucene/document/XYDocValuesPointInGeometryQuery.java index 132a3a36308d..c6e0b41d048e 100644 --- a/lucene/core/src/java/org/apache/lucene/document/XYDocValuesPointInGeometryQuery.java +++ b/lucene/core/src/java/org/apache/lucene/document/XYDocValuesPointInGeometryQuery.java @@ -25,7 +25,7 @@ import org.apache.lucene.index.DocValues; import org.apache.lucene.index.LeafReaderContext; import org.apache.lucene.index.SortedNumericDocValues; -import org.apache.lucene.search.ConstantScoreScorer; +import org.apache.lucene.search.ConstantScoreScorerSupplier; import org.apache.lucene.search.ConstantScoreWeight; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.Query; @@ -130,8 +130,11 @@ public float matchCost() { return 1000f; // TODO: what should it be? } }; - final var scorer = new ConstantScoreScorer(boost, scoreMode, iterator); - return new DefaultScorerSupplier(scorer); + return ConstantScoreScorerSupplier.fromIterator( + TwoPhaseIterator.asDocIdSetIterator(iterator), + boost, + scoreMode, + context.reader().maxDoc()); } @Override