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

houston pushed a commit to branch branch_9x
in repository https://gitbox.apache.org/repos/asf/solr.git


The following commit(s) were added to refs/heads/branch_9x by this push:
     new c9866fb45db SOLR-17678: Change matchScore to originalScore, make it a 
fake-function (#3381)
c9866fb45db is described below

commit c9866fb45dbfbcb95ac7fc710bfbdba1bbd7363c
Author: Houston Putman <[email protected]>
AuthorDate: Tue Jun 10 10:19:59 2025 -0500

    SOLR-17678: Change matchScore to originalScore, make it a fake-function 
(#3381)
    
    (cherry picked from commit b3ba48ff67de5cf516da8d5136336b4c115918ed)
---
 solr/CHANGES.txt                                   |  2 +-
 .../org/apache/solr/response/DocsStreamer.java     |  2 --
 ...eAugmenter.java => OriginalScoreAugmenter.java} |  8 ++++----
 .../org/apache/solr/search/DocIterationInfo.java   |  6 +++---
 .../org/apache/solr/search/ReRankCollector.java    |  6 +++---
 .../org/apache/solr/search/SolrReturnFields.java   | 24 ++++++++++++++--------
 .../java/org/apache/solr/search/TopDocsSlice.java  |  8 ++++----
 .../solr/search/DistributedReRankExplainTest.java  | 12 +++++------
 .../solr/search/TestReRankQParserPlugin.java       | 12 +++++------
 .../query-guide/pages/query-re-ranking.adoc        |  8 ++++----
 10 files changed, 47 insertions(+), 41 deletions(-)

diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index fc37ad18708..2e3bc6e3d52 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -21,7 +21,7 @@ New Features
 
 * SOLR-17714: Added a FuzzyQParser to enable all FuzzyQuery customizations. 
(Houston Putman, Siju Varghese)
 
-* SOLR-17678: ReRank queries can now return the matchScore (original score) in 
addition to the re-ranked score. (Siju Varghese, Houston Putman)
+* SOLR-17678: ReRank queries can now return the originalScore (original score) 
in addition to the re-ranked score. (Siju Varghese, Houston Putman)
 
 * SOLR-17447: Support terminating a search early based on maxHitsAllowed per 
shard. (Siju Varghese, Houston Putman, David Smiley, Gus Heck)
 
diff --git a/solr/core/src/java/org/apache/solr/response/DocsStreamer.java 
b/solr/core/src/java/org/apache/solr/response/DocsStreamer.java
index 7f34d0e4a80..60a879c2ed7 100644
--- a/solr/core/src/java/org/apache/solr/response/DocsStreamer.java
+++ b/solr/core/src/java/org/apache/solr/response/DocsStreamer.java
@@ -60,8 +60,6 @@ public class DocsStreamer implements Iterator<SolrDocument> {
   private final org.apache.solr.response.ResultContext rctx;
   private final SolrDocumentFetcher docFetcher; // a collaborator of 
SolrIndexSearcher
   private final DocList docs;
-  private boolean doScore;
-  private boolean doMatchScore;
 
   private final DocTransformer transformer;
   private final DocIterator docIterator;
diff --git 
a/solr/core/src/java/org/apache/solr/response/transform/MatchScoreAugmenter.java
 
b/solr/core/src/java/org/apache/solr/response/transform/OriginalScoreAugmenter.java
similarity index 85%
rename from 
solr/core/src/java/org/apache/solr/response/transform/MatchScoreAugmenter.java
rename to 
solr/core/src/java/org/apache/solr/response/transform/OriginalScoreAugmenter.java
index 441c18dd285..f62e98e8d63 100644
--- 
a/solr/core/src/java/org/apache/solr/response/transform/MatchScoreAugmenter.java
+++ 
b/solr/core/src/java/org/apache/solr/response/transform/OriginalScoreAugmenter.java
@@ -20,14 +20,14 @@ import org.apache.solr.common.SolrDocument;
 import org.apache.solr.search.DocIterationInfo;
 
 /**
- * Simple Augmenter that adds the matchScore
+ * Simple Augmenter that adds the originalScore
  *
  * @since solr 4.0
  */
-public class MatchScoreAugmenter extends DocTransformer {
+public class OriginalScoreAugmenter extends DocTransformer {
   final String name;
 
-  public MatchScoreAugmenter(String display) {
+  public OriginalScoreAugmenter(String display) {
     this.name = display;
   }
 
@@ -38,7 +38,7 @@ public class MatchScoreAugmenter extends DocTransformer {
 
   @Override
   public void transform(SolrDocument doc, int docid, DocIterationInfo docInfo) 
{
-    doc.setField(name, docInfo.matchScore());
+    doc.setField(name, docInfo.originalScore());
   }
 
   @Override
diff --git a/solr/core/src/java/org/apache/solr/search/DocIterationInfo.java 
b/solr/core/src/java/org/apache/solr/search/DocIterationInfo.java
index d67165738c3..8d3e073d09d 100644
--- a/solr/core/src/java/org/apache/solr/search/DocIterationInfo.java
+++ b/solr/core/src/java/org/apache/solr/search/DocIterationInfo.java
@@ -28,11 +28,11 @@ public interface DocIterationInfo {
   public float score();
 
   /**
-   * Returns the query match score in case of rerank queries
+   * Returns the original query match score in case of rerank queries
    *
-   * @return the query match score in case of a rerank query, null otherwise.
+   * @return the original query match score in case of a rerank query, null 
otherwise.
    */
-  public default Float matchScore() {
+  default Float originalScore() {
     return null;
   }
 }
diff --git a/solr/core/src/java/org/apache/solr/search/ReRankCollector.java 
b/solr/core/src/java/org/apache/solr/search/ReRankCollector.java
index 10abc972b3d..13db7d42c29 100644
--- a/solr/core/src/java/org/apache/solr/search/ReRankCollector.java
+++ b/solr/core/src/java/org/apache/solr/search/ReRankCollector.java
@@ -271,11 +271,11 @@ public class ReRankCollector extends 
TopDocsCollector<ScoreDoc> {
   }
 
   static class RescoreDoc extends ScoreDoc {
-    public float matchScore;
+    public float originalScore;
 
-    public RescoreDoc(ScoreDoc scoreDoc, float matchScore) {
+    public RescoreDoc(ScoreDoc scoreDoc, float originalScore) {
       super(scoreDoc.doc, scoreDoc.score, scoreDoc.shardIndex);
-      this.matchScore = matchScore;
+      this.originalScore = originalScore;
     }
   }
 }
diff --git a/solr/core/src/java/org/apache/solr/search/SolrReturnFields.java 
b/solr/core/src/java/org/apache/solr/search/SolrReturnFields.java
index 16a2f6781af..939cf9b778c 100644
--- a/solr/core/src/java/org/apache/solr/search/SolrReturnFields.java
+++ b/solr/core/src/java/org/apache/solr/search/SolrReturnFields.java
@@ -37,7 +37,7 @@ import org.apache.solr.common.util.GlobPatternUtil;
 import org.apache.solr.request.SolrQueryRequest;
 import org.apache.solr.response.transform.DocTransformer;
 import org.apache.solr.response.transform.DocTransformers;
-import org.apache.solr.response.transform.MatchScoreAugmenter;
+import org.apache.solr.response.transform.OriginalScoreAugmenter;
 import org.apache.solr.response.transform.RenameFieldTransformer;
 import org.apache.solr.response.transform.ScoreAugmenter;
 import org.apache.solr.response.transform.TransformerFactory;
@@ -48,7 +48,8 @@ import 
org.apache.solr.search.SolrDocumentFetcher.RetrieveFieldsOptimizer;
 public class SolrReturnFields extends ReturnFields {
   // Special Field Keys
   public static final String SCORE = "score";
-  public static final String MATCH_SCORE = "matchScore";
+  public static final String ORIGINAL_SCORE_NAME = "originalScore";
+  public static final String ORIGINAL_SCORE = "originalScore()";
 
   private final List<String> globs = new ArrayList<>(1);
 
@@ -313,6 +314,19 @@ public class SolrReturnFields extends ReturnFields {
               globs.add(field);
             }
             continue;
+          } else if (ORIGINAL_SCORE_NAME.equals(field) && sp.opt("(") && 
sp.opt(")")) {
+            // TODO: Remove this in 
https://issues.apache.org/jira/browse/SOLR-17784 when
+            // originalScore() becomes a true function
+            ch = sp.ch();
+            if (Character.isWhitespace(ch) || ch == ',' || ch == 0) {
+              _wantsScore = true;
+
+              String disp = (key == null) ? ORIGINAL_SCORE : key;
+              augmenters.addTransformer(new OriginalScoreAugmenter(disp));
+              scoreDependentFields.put(disp, disp.equals(ORIGINAL_SCORE) ? "" 
: ORIGINAL_SCORE);
+              addField(ORIGINAL_SCORE, disp, augmenters, true);
+              continue;
+            }
           }
 
           // an invalid glob
@@ -501,12 +515,6 @@ public class SolrReturnFields extends ReturnFields {
       String disp = (key == null) ? field : key;
       augmenters.addTransformer(new ScoreAugmenter(disp));
       scoreDependentFields.put(disp, disp.equals(SCORE) ? "" : SCORE);
-    } else if (MATCH_SCORE.equals(field)) {
-      _wantsScore = true;
-
-      String disp = (key == null) ? field : key;
-      augmenters.addTransformer(new MatchScoreAugmenter(disp));
-      scoreDependentFields.put(disp, disp.equals(MATCH_SCORE) ? "" : 
MATCH_SCORE);
     }
   }
 
diff --git a/solr/core/src/java/org/apache/solr/search/TopDocsSlice.java 
b/solr/core/src/java/org/apache/solr/search/TopDocsSlice.java
index d6141e156cd..daf37a20cf5 100644
--- a/solr/core/src/java/org/apache/solr/search/TopDocsSlice.java
+++ b/solr/core/src/java/org/apache/solr/search/TopDocsSlice.java
@@ -79,9 +79,9 @@ public class TopDocsSlice extends DocSlice {
 
   @Override
   public DocIterator iterator() {
-    boolean hasMatchScore =
+    boolean hasOriginalScore =
         topDocs.scoreDocs.length > 0 && topDocs.scoreDocs[0] instanceof 
ReRankCollector.RescoreDoc;
-    if (hasMatchScore) {
+    if (hasOriginalScore) {
       return new ReRankedTopDocsIterator();
     } else {
       return new TopDocsIterator();
@@ -123,9 +123,9 @@ public class TopDocsSlice extends DocSlice {
   class ReRankedTopDocsIterator extends TopDocsIterator {
 
     @Override
-    public Float matchScore() {
+    public Float originalScore() {
       try {
-        return ((ReRankCollector.RescoreDoc) topDocs.scoreDocs[pos - 
1]).matchScore;
+        return ((ReRankCollector.RescoreDoc) topDocs.scoreDocs[pos - 
1]).originalScore;
       } catch (ClassCastException e) {
         return null;
       }
diff --git 
a/solr/core/src/test/org/apache/solr/search/DistributedReRankExplainTest.java 
b/solr/core/src/test/org/apache/solr/search/DistributedReRankExplainTest.java
index 6597f1b2c85..152b1ba9a93 100644
--- 
a/solr/core/src/test/org/apache/solr/search/DistributedReRankExplainTest.java
+++ 
b/solr/core/src/test/org/apache/solr/search/DistributedReRankExplainTest.java
@@ -161,18 +161,18 @@ public class DistributedReRankExplainTest extends 
SolrCloudTestCase {
                     CommonParams.Q,
                     "test_s:hello",
                     "fl",
-                    "id,test_s,score,originalScore:matchScore,matchScore")));
+                    
"id,test_s,score,matchScore:originalScore(),originalScore()")));
 
     final QueryResponse queryResponse = queryRequest.process(client, 
COLLECTIONORALIAS);
     for (SolrDocument doc : queryResponse.getResults()) {
       assertNotNull("test_s", doc.getFieldValue("test_s"));
+      assertNotNull("originalScore()", doc.getFieldValue("originalScore()"));
+      assertTrue(queryResponse.toString(), 
doc.getFieldValue("originalScore()") instanceof Float);
       assertNotNull("matchScore", doc.getFieldValue("matchScore"));
-      assertTrue(queryResponse.toString(), doc.getFieldValue("matchScore") 
instanceof Float);
-      assertNotNull("originalScore", doc.getFieldValue("originalScore"));
       assertTrue(
-          doc.getFieldValue("originalScore").toString(),
-          doc.getFieldValue("originalScore") instanceof Float);
-      assertEquals(doc.getFieldValue("matchScore"), 
doc.getFieldValue("originalScore"));
+          doc.getFieldValue("matchScore").toString(),
+          doc.getFieldValue("matchScore") instanceof Float);
+      assertEquals(doc.getFieldValue("originalScore()"), 
doc.getFieldValue("matchScore"));
     }
     return queryResponse;
   }
diff --git 
a/solr/core/src/test/org/apache/solr/search/TestReRankQParserPlugin.java 
b/solr/core/src/test/org/apache/solr/search/TestReRankQParserPlugin.java
index e7d457b06be..b3e05ae5cbb 100644
--- a/solr/core/src/test/org/apache/solr/search/TestReRankQParserPlugin.java
+++ b/solr/core/src/test/org/apache/solr/search/TestReRankQParserPlugin.java
@@ -65,7 +65,7 @@ public class TestReRankQParserPlugin extends SolrTestCaseJ4 {
   }
 
   @Test
-  public void testRerankReturnMatchScore() throws Exception {
+  public void testRerankReturnOriginalScore() throws Exception {
 
     assertU(delQ("*:*"));
     assertU(commit());
@@ -121,17 +121,17 @@ public class TestReRankQParserPlugin extends 
SolrTestCaseJ4 {
     params.add("start", "0");
     params.add("rows", "6");
     params.add("df", "text");
-    params.add("fl", "id,test_ti,score,matchScore");
+    params.add("fl", "id,test_ti,score,originalScore()");
 
     assertQ(
         req(params),
         "*[count(//doc)=6]",
         "//result/doc[1]/str[@name='id'][.='3']",
         "//result/doc[1]/float[@name='score'][.>'10000.03']",
-        "//result/doc[1]/float[@name='matchScore'][.>'0.03']",
+        "//result/doc[1]/float[@name='originalScore()'][.>'0.03']",
         "//result/doc[2]/str[@name='id'][.='4']",
         "//result/doc[2]/float[@name='score'][.>'1000.03']",
-        "//result/doc[2]/float[@name='matchScore'][.>'0.03']",
+        "//result/doc[2]/float[@name='originalScore()'][.>'0.03']",
         "//result/doc[3]/str[@name='id'][.='2']",
         "//result/doc[4]/str[@name='id'][.='6']",
         "//result/doc[5]/str[@name='id'][.='1']",
@@ -139,7 +139,7 @@ public class TestReRankQParserPlugin extends SolrTestCaseJ4 
{
   }
 
   @Test
-  public void testRerankReturnMatchScoreNotRequested() throws Exception {
+  public void testRerankReturnOriginalScoreNotRequested() throws Exception {
 
     assertU(delQ("*:*"));
     assertU(commit());
@@ -198,7 +198,7 @@ public class TestReRankQParserPlugin extends SolrTestCaseJ4 
{
     params.add("fl", "id,test_ti,score");
 
     String response = JQ(req(params));
-    assertFalse(response.contains("matchScore"));
+    assertFalse(response.contains("originalScore()"));
   }
 
   @Test
diff --git 
a/solr/solr-ref-guide/modules/query-guide/pages/query-re-ranking.adoc 
b/solr/solr-ref-guide/modules/query-guide/pages/query-re-ranking.adoc
index e4533412f5e..737ebef74af 100644
--- a/solr/solr-ref-guide/modules/query-guide/pages/query-re-ranking.adoc
+++ b/solr/solr-ref-guide/modules/query-guide/pages/query-re-ranking.adoc
@@ -107,13 +107,13 @@ q=greetings&rq={!rerank reRankQuery=$rqq reRankDocs=1000 
reRankWeight=3}&rqq=(hi
 ----
 
 If a document matches the original query, but does not match the re-ranking 
query, the document's original score will remain.
-For reranked documents, an additional `matchScore` field in the response will 
indicate the original score for a reranked doc. This
-is the score for the document prior to rerank being applied. For documents 
that were not reranked, the matchScore and score fields
-will have the same value. For the example above, you would use the following 
to return the match score:
+For reranked documents, an additional `originalScore()` function in the 
response will indicate the original score for a reranked doc. This
+is the score for the document prior to rerank being applied. For documents 
that were not reranked, the `originalScore()` and `score` fields
+will have the same value. For the example above, you would use the following 
to return the original score:
 
 [source,text]
 ----
-q=greetings&rq={!rerank reRankQuery=$rqq reRankDocs=1000 
reRankWeight=3}&rqq=(hi+hello+hey+hiya)&fl=id,matchScore
+q=greetings&rq={!rerank reRankQuery=$rqq reRankDocs=1000 
reRankWeight=3}&rqq=(hi+hello+hey+hiya)&fl=id,originalScore()
 ----
 
 Setting `reRankOperator` to `multiply` will multiply the three numbers 
instead. This means that other multiplying operations such as 
xref:edismax-query-parser.adoc#extended-dismax-parameters[eDisMax `boost` 
functions] can be converted to Re-Rank operations.

Reply via email to