diff --git a/lucene/CHANGES.txt b/lucene/CHANGES.txt index bdb819d2630..6b941f1e581 100644 --- a/lucene/CHANGES.txt +++ b/lucene/CHANGES.txt @@ -103,6 +103,9 @@ the total hits is not requested. * LUCENE-8939: Introduce shared count based early termination across multiple slices (Atri Sharma) +* LUCENE-8980: Blocktree's seekExact now short-circuits false if the term isn't in the min-max range of the segment. + Large perf gain for ID/time like data when populated sequentially. (Guoqiang Jiang) + Bug Fixes * LUCENE-8755: spatial-extras quad and packed quad prefix trees could throw a diff --git a/lucene/core/src/java/org/apache/lucene/codecs/blocktree/SegmentTermsEnum.java b/lucene/core/src/java/org/apache/lucene/codecs/blocktree/SegmentTermsEnum.java index c9d0ddf6419..56b6843efbc 100644 --- a/lucene/core/src/java/org/apache/lucene/codecs/blocktree/SegmentTermsEnum.java +++ b/lucene/core/src/java/org/apache/lucene/codecs/blocktree/SegmentTermsEnum.java @@ -321,6 +321,10 @@ final class SegmentTermsEnum extends BaseTermsEnum { throw new IllegalStateException("terms index was not loaded"); } + if (fr.size() > 0 && (target.compareTo(fr.getMin()) < 0 || target.compareTo(fr.getMax()) > 0)) { + return false; + } + term.grow(1 + target.length); assert clearEOF();