You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by tf...@apache.org on 2021/02/11 17:10:21 UTC

[lucene-solr] branch master updated: SOLR-15114: WAND does not work correctly on multiple segments (#2259)

This is an automated email from the ASF dual-hosted git repository.

tflobbe pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git


The following commit(s) were added to refs/heads/master by this push:
     new 0cbb38f  SOLR-15114: WAND does not work correctly on multiple segments (#2259)
0cbb38f is described below

commit 0cbb38ff4a38dea31324265da13412dd713d9a8e
Author: Naoto MINAMI <mi...@gmail.com>
AuthorDate: Fri Feb 12 02:10:03 2021 +0900

    SOLR-15114: WAND does not work correctly on multiple segments (#2259)
    
    In Solr 8.6.3, minCompetitiveScore of WANDScorer resets to zero for each index segment and remain zero until maxScore is updated.
    There are two causes of this problem:
    * MaxScoreCollector does not set minCompetitiveScore of MinCompetitiveScoreAwareScorable newly generated for another index segment.
    * MaxScoreCollector updates minCompetitiveScore only if maxScore is updated. This behavior is correct considering the purpose of MaxScoreCollector.
    
    For details, see the attached pdf https://issues.apache.org/jira/secure/attachment/13019548/wand.pdf.
---
 solr/core/src/java/org/apache/solr/search/MaxScoreCollector.java | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/solr/core/src/java/org/apache/solr/search/MaxScoreCollector.java b/solr/core/src/java/org/apache/solr/search/MaxScoreCollector.java
index 744e576..0cd76b6 100644
--- a/solr/core/src/java/org/apache/solr/search/MaxScoreCollector.java
+++ b/solr/core/src/java/org/apache/solr/search/MaxScoreCollector.java
@@ -41,7 +41,12 @@ public class MaxScoreCollector extends SimpleCollector {
   }
 
   @Override
-  public void setScorer(Scorable scorer) {
+  public void setScorer(Scorable scorer) throws IOException {
+    if (maxScore == Float.MIN_VALUE) {
+      scorer.setMinCompetitiveScore(0f);
+    } else {
+      scorer.setMinCompetitiveScore(Math.nextUp(maxScore));
+    }
     this.scorer = scorer;
   }