diff --git a/lucene/CHANGES.txt b/lucene/CHANGES.txt index 979f742b3082..1821a3bb55d7 100644 --- a/lucene/CHANGES.txt +++ b/lucene/CHANGES.txt @@ -368,6 +368,8 @@ Optimizations * GITHUB#16380: Speed up filtered disjunction queries when the filter is part of the index sort by advancing the filter before calculating impacts. (Alan Woodward) +* GITHUB#16399: Reuse the previous end offset to skip a redundant addresses.get() in sorted numeric rangeIntoBitSet. (Sagar Upadhyaya) + Bug Fixes --------------------- * GITHUB#16350: Disable bulk-scoring in monitor queries. (Alan Woodward) diff --git a/lucene/core/src/java/org/apache/lucene/codecs/lucene90/Lucene90DocValuesProducer.java b/lucene/core/src/java/org/apache/lucene/codecs/lucene90/Lucene90DocValuesProducer.java index 25eefc2660c7..83bfb934439f 100644 --- a/lucene/core/src/java/org/apache/lucene/codecs/lucene90/Lucene90DocValuesProducer.java +++ b/lucene/core/src/java/org/apache/lucene/codecs/lucene90/Lucene90DocValuesProducer.java @@ -2041,12 +2041,13 @@ public void rangeIntoBitSet( v, fromDoc, endDoc, cardinality, lo, hi, bitSet, offset); return; } + long startOffset = addresses.get(fromDoc); for (int currentDoc = fromDoc; currentDoc < endDoc; currentDoc++) { - long startOffset = addresses.get(currentDoc); long endOffset = addresses.get(currentDoc + 1L); if (sortedNumericMatchesRange(v, startOffset, endOffset, lo, hi)) { bitSet.set(currentDoc - offset); } + startOffset = endOffset; } }