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 30b1d4b7e5a8..40e44b7c4286 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