From 6c6bb00cec84de04b405f230beeb8691a59a2be0 Mon Sep 17 00:00:00 2001 From: xiaoping Date: Wed, 11 May 2022 14:36:24 +0800 Subject: [PATCH] LUCENE-10555: fix iteratorCost initial logic error (#878) --- .../lucene/search/comparators/NumericComparator.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/lucene/core/src/java/org/apache/lucene/search/comparators/NumericComparator.java b/lucene/core/src/java/org/apache/lucene/search/comparators/NumericComparator.java index ddbf9a1d4ad..1e7bebb9dca 100644 --- a/lucene/core/src/java/org/apache/lucene/search/comparators/NumericComparator.java +++ b/lucene/core/src/java/org/apache/lucene/search/comparators/NumericComparator.java @@ -126,7 +126,6 @@ public abstract class NumericComparator extends FieldComparato this.minValueAsBytes = reverse ? new byte[bytesCount] : topValueSet ? new byte[bytesCount] : null; this.competitiveIterator = DocIdSetIterator.all(maxDoc); - this.iteratorCost = maxDoc; } else { this.enableSkipping = false; this.maxDoc = 0; @@ -165,9 +164,13 @@ public abstract class NumericComparator extends FieldComparato @Override public void setScorer(Scorable scorer) throws IOException { - if (iteratorCost == -1 && scorer instanceof Scorer) { - iteratorCost = - ((Scorer) scorer).iterator().cost(); // starting iterator cost is the scorer's cost + if (iteratorCost == -1) { + if (scorer instanceof Scorer) { + iteratorCost = + ((Scorer) scorer).iterator().cost(); // starting iterator cost is the scorer's cost + } else { + iteratorCost = maxDoc; + } updateCompetitiveIterator(); // update an iterator when we have a new segment } }