From ce464c7d6d20f49c2fe29126fcf400ee1cfeb112 Mon Sep 17 00:00:00 2001 From: Adrien Grand Date: Mon, 25 Sep 2023 13:54:08 +0200 Subject: [PATCH] Fix test failure. --- .../apache/lucene/search/BlockMaxConjunctionBulkScorer.java | 6 ++++-- .../src/java/org/apache/lucene/search/BooleanWeight.java | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/lucene/core/src/java/org/apache/lucene/search/BlockMaxConjunctionBulkScorer.java b/lucene/core/src/java/org/apache/lucene/search/BlockMaxConjunctionBulkScorer.java index d4bf676f5662..3c505fa66a4a 100644 --- a/lucene/core/src/java/org/apache/lucene/search/BlockMaxConjunctionBulkScorer.java +++ b/lucene/core/src/java/org/apache/lucene/search/BlockMaxConjunctionBulkScorer.java @@ -40,8 +40,9 @@ final class BlockMaxConjunctionBulkScorer extends BulkScorer { private final DocIdSetIterator lead; private final DocAndScore scorable = new DocAndScore(); private final double[] sumOfOtherClauses; + private final int maxDoc; - BlockMaxConjunctionBulkScorer(List scorers) throws IOException { + BlockMaxConjunctionBulkScorer(int maxDoc, List scorers) throws IOException { if (scorers.size() <= 1) { throw new IllegalArgumentException("Expected 2 or more scorers, got " + scorers.size()); } @@ -51,6 +52,7 @@ final class BlockMaxConjunctionBulkScorer extends BulkScorer { Arrays.stream(this.scorers).map(Scorer::iterator).toArray(DocIdSetIterator[]::new); lead = iterators[0]; this.sumOfOtherClauses = new double[this.scorers.length]; + this.maxDoc = maxDoc; } @Override @@ -79,7 +81,7 @@ public int score(LeafCollector collector, Bits acceptDocs, int min, int max) thr windowMin = Math.max(lead.docID(), windowMax + 1); } - return windowMin; + return windowMin >= maxDoc ? DocIdSetIterator.NO_MORE_DOCS : windowMin; } private void scoreWindow( diff --git a/lucene/core/src/java/org/apache/lucene/search/BooleanWeight.java b/lucene/core/src/java/org/apache/lucene/search/BooleanWeight.java index b709bff6111f..aa4dd707072c 100644 --- a/lucene/core/src/java/org/apache/lucene/search/BooleanWeight.java +++ b/lucene/core/src/java/org/apache/lucene/search/BooleanWeight.java @@ -315,7 +315,7 @@ private BulkScorer requiredBulkScorer(LeafReaderContext context) throws IOExcept && requiredScoring.size() > 1 // Only specialize top-level conjunctions for clauses that don't have a two-phase iterator. && requiredScoring.stream().map(Scorer::twoPhaseIterator).allMatch(Objects::isNull)) { - return new BlockMaxConjunctionBulkScorer(requiredScoring); + return new BlockMaxConjunctionBulkScorer(context.reader().maxDoc(), requiredScoring); } if (scoreMode == ScoreMode.TOP_SCORES && requiredScoring.size() > 1) { requiredScoring =