You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ab...@apache.org on 2017/12/07 12:45:33 UTC

[39/50] [abbrv] lucene-solr:jira/solr-11285-sim: LUCENE-7996: PayloadScoreQuery must produce positive scores.

LUCENE-7996: PayloadScoreQuery must produce positive scores.


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

Branch: refs/heads/jira/solr-11285-sim
Commit: 187849f9b67ba6b7e6c2d06cc25359bf53b2ce9f
Parents: 63b63c5
Author: Adrien Grand <jp...@gmail.com>
Authored: Wed Dec 6 19:15:13 2017 +0100
Committer: Adrien Grand <jp...@gmail.com>
Committed: Wed Dec 6 19:15:13 2017 +0100

----------------------------------------------------------------------
 .../lucene/queries/payloads/PayloadScoreQuery.java   | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/187849f9/lucene/queries/src/java/org/apache/lucene/queries/payloads/PayloadScoreQuery.java
----------------------------------------------------------------------
diff --git a/lucene/queries/src/java/org/apache/lucene/queries/payloads/PayloadScoreQuery.java b/lucene/queries/src/java/org/apache/lucene/queries/payloads/PayloadScoreQuery.java
index 17e8901..736a676 100644
--- a/lucene/queries/src/java/org/apache/lucene/queries/payloads/PayloadScoreQuery.java
+++ b/lucene/queries/src/java/org/apache/lucene/queries/payloads/PayloadScoreQuery.java
@@ -233,11 +233,22 @@ public class PayloadScoreQuery extends SpanQuery {
     }
 
     protected float getPayloadScore() {
-      return function.docScore(docID(), getField(), spans.payloadsSeen, spans.payloadScore);
+      float score = function.docScore(docID(), getField(), spans.payloadsSeen, spans.payloadScore);
+      if (score >= 0 == false) {
+        return 0;
+      } else {
+        return score;
+      }
     }
 
     protected Explanation getPayloadExplanation() {
-      return function.explain(docID(), getField(), spans.payloadsSeen, spans.payloadScore);
+      Explanation expl = function.explain(docID(), getField(), spans.payloadsSeen, spans.payloadScore);
+      if (expl.getValue() < 0) {
+        expl = Explanation.match(0, "truncated score, max of:", Explanation.match(0f, "minimum score"), expl);
+      } else if (Float.isNaN(expl.getValue())) {
+        expl = Explanation.match(0, "payload score, computed as (score == NaN ? 0 : score) since NaN is an illegal score from:", expl);
+      }
+      return expl;
     }
 
     protected float getSpanScore() throws IOException {