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;
}