lucene-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From da...@apache.org
Subject [01/36] lucene-solr:jira/http2: LUCENE-8427: Fix bug in BlockMaxConjunctionScorer.
Date Tue, 31 Jul 2018 02:32:17 GMT
Repository: lucene-solr
Updated Branches:
  refs/heads/jira/http2 7a045d16e -> 8b208776e


LUCENE-8427: Fix bug in BlockMaxConjunctionScorer.

In case a scorer would return information about a block that doesn't contain
any matches, BlockMaxConjunctionScorer could use invalid score bounds. This
would never occur when building a conjunction of term queries but possibly when
building a conjunction of phrase queries for instance.


Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/65f6e6c1
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/65f6e6c1
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/65f6e6c1

Branch: refs/heads/jira/http2
Commit: 65f6e6c1501b3fd075ca586dd9bd49850514d234
Parents: 35fa0b4
Author: Adrien Grand <jpountz@gmail.com>
Authored: Wed Jul 25 10:57:11 2018 +0200
Committer: Adrien Grand <jpountz@gmail.com>
Committed: Wed Jul 25 10:57:11 2018 +0200

----------------------------------------------------------------------
 .../lucene/search/BlockMaxConjunctionScorer.java      | 14 ++++++++++++++
 1 file changed, 14 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/65f6e6c1/lucene/core/src/java/org/apache/lucene/search/BlockMaxConjunctionScorer.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/search/BlockMaxConjunctionScorer.java
b/lucene/core/src/java/org/apache/lucene/search/BlockMaxConjunctionScorer.java
index bb5d99c..cbfcd2e 100644
--- a/lucene/core/src/java/org/apache/lucene/search/BlockMaxConjunctionScorer.java
+++ b/lucene/core/src/java/org/apache/lucene/search/BlockMaxConjunctionScorer.java
@@ -145,6 +145,20 @@ final class BlockMaxConjunctionScorer extends Scorer {
             return NO_MORE_DOCS;
           }
 
+          if (doc > upTo) {
+            // This check is useful when scorers return information about blocks
+            // that do not actually have any matches. Otherwise `doc` will always
+            // be in the current block already since it is always the result of
+            // lead.advance(advanceTarget(some_doc_id))
+            final int nextTarget = advanceTarget(doc);
+            if (nextTarget != doc) {
+              doc = lead.advance(nextTarget);
+              continue;
+            }
+          }
+
+          assert doc <= upTo;
+
           if (minScore > 0) {
             score = leadScorer.score();
             if (score < minScores[0]) {


Mime
View raw message