[ 
https://issues.apache.org/jira/browse/LUCENE-9542?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17223207#comment-17223207
 ] 

Jason Baik commented on LUCENE-9542:
------------------------------------

[^0001-LUCENE-9542-Unit-test-to-reproduce-bug.patch] contains a unit test that 
reproduces the bug.

We're experiencing the same problem after migrating from Solr 6 to Solr 8. 
[~krishan1390]'s suggestion of changing query -> cmd.getQuery() works, but for 
the longer term, it might be better to add some API that indicates whether the 
top collector has already computed the scores. That way, the lazy score 
computation. which LUCENE-8412 introduced AFTER the top doc collection stage, 
can more reliably decide if it should compute and overwrite the scores.

In other words, instead of this:
{code:java}
TopDocs topDocs = topCollector.topDocs(0, len);
if (cmd.getSort() != null && query instanceof RankQuery == false && 
(cmd.getFlags() & GET_SCORES) != 0) {
  TopFieldCollector.populateScores(topDocs.scoreDocs, this, query);
} {code}
Do something like this:
{code:java}
TopDocs topDocs = topCollector.topDocs(0, len);
if (cmd.getSort() != null && !topCollector.hasAlreadyComputedScores() && 
(cmd.getFlags() & GET_SCORES) != 0) {
  TopFieldCollector.populateScores(topDocs.scoreDocs, this, query);
}
 {code}
Although a counter-argument to this generic solution could be that this problem 
is currently limited to ReRankQuery's, which is unique in the sense that its 
score modifying behavior is implemented in the top doc collector layer, as 
opposed to in the Weight/Scorer layer since it wants to do the score 
modification for only a subset of the matched docs.

 

> Score returned in search request is original score and not reranked score
> -------------------------------------------------------------------------
>
>                 Key: LUCENE-9542
>                 URL: https://issues.apache.org/jira/browse/LUCENE-9542
>             Project: Lucene - Core
>          Issue Type: Bug
>    Affects Versions: 8.0
>            Reporter: Krishan
>            Priority: Major
>         Attachments: 0001-LUCENE-9542-Unit-test-to-reproduce-bug.patch
>
>
> Score returned in search request is original score and not reranked score 
> post the changes in https://issues.apache.org/jira/browse/LUCENE-8412.
> Commit - 
> [https://github.com/apache/lucene-solr/commit/55bfadbce115a825a75686fe0bfe71406bc3ee44#diff-4e354f104ed52bd7f620b0c05ae8467d]
> Specifically - 
> if (cmd.getSort() != null && query instanceof RankQuery == false && 
> (cmd.getFlags() & GET_SCORES) != 0) {
>     TopFieldCollector.populateScores(topDocs.scoreDocs, this, query);
> }
> in SolrIndexSearcher.java recomputes the score but outputs only the original 
> score and not the reranked score.
>  
> The issue is cmd.getQuery() is a type of RankQuery but the "query" variable 
> is a boolean query and probably replacing query with cmd.getQuery() should be 
> the right fix for this so that the score is not overriden for rerank queries
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscr...@lucene.apache.org
For additional commands, e-mail: issues-h...@lucene.apache.org

Reply via email to