From 149a521c676a734d95859a102ef413b4dffbff5e Mon Sep 17 00:00:00 2001 From: Adrien Grand Date: Thu, 30 Jan 2025 20:49:47 +0100 Subject: [PATCH] Filtered disjunctions may miss some top hits. This is a rare bug (for instance none of the queries in nightly benchmarks return different top hits with the fix, and I haven't been able to create a proper test) but still a bug. --- .../src/java/org/apache/lucene/search/MaxScoreBulkScorer.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lucene/core/src/java/org/apache/lucene/search/MaxScoreBulkScorer.java b/lucene/core/src/java/org/apache/lucene/search/MaxScoreBulkScorer.java index 30b1d4b7e5a..40e44b7c428 100644 --- a/lucene/core/src/java/org/apache/lucene/search/MaxScoreBulkScorer.java +++ b/lucene/core/src/java/org/apache/lucene/search/MaxScoreBulkScorer.java @@ -170,8 +170,9 @@ private void scoreInnerWindowWithFilter( DisiWrapper top = essentialQueue.top(); assert top.doc < max; - if (top.doc < filter.doc) { + while (top.doc < filter.doc) { top.doc = top.approximation.advance(filter.doc); + top = essentialQueue.updateTop(); } // Only score an inner window, after that we'll check if the min competitive score has increased