From 4df2702cdbf2195ddc5e8623231d903f6908e693 Mon Sep 17 00:00:00 2001 From: johngqjiang Date: Thu, 26 Sep 2019 15:57:22 -0400 Subject: [PATCH] LUCENE-8980: Blocktree seekExact now checks min-max range of the segment (cherry picked from commit 99f4cec459177caeb16644e4592d807d125c1613) --- lucene/CHANGES.txt | 3 +++ .../org/apache/lucene/codecs/blocktree/SegmentTermsEnum.java | 4 ++++ 2 files changed, 7 insertions(+) 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();