This is an automated email from the ASF dual-hosted git repository.
cpoerschke pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/solr.git
The following commit(s) were added to refs/heads/main by this push:
new d67ff3a SOLR-15496: Reuse comparator objects in contrib/ltr rescorer
classes. (#228)
d67ff3a is described below
commit d67ff3afed062ec0e5f0971d5bceef20cec8b34f
Author: Marcos Pontes <[email protected]>
AuthorDate: Wed Jul 21 13:18:14 2021 -0300
SOLR-15496: Reuse comparator objects in contrib/ltr rescorer classes. (#228)
---
solr/CHANGES.txt | 2 ++
.../src/java/org/apache/solr/ltr/LTRRescorer.java | 41 ++++++++++------------
.../ltr/interleaving/LTRInterleavingRescorer.java | 3 +-
3 files changed, 23 insertions(+), 23 deletions(-)
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 4bea2e2..4a8c680 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -383,6 +383,8 @@ Optimizations
---------------------
* SOLR-15433: Replace transient core cache LRU by Caffeine cache. (Bruno
Roustant)
+* SOLR-15496: Reuse comparator objects in contrib/ltr rescorer classes.
(marcosfpr via Christine Poerschke)
+
Bug Fixes
---------------------
* SOLR-15311: Support async parameter in MODIFYCOLLECTION
diff --git a/solr/contrib/ltr/src/java/org/apache/solr/ltr/LTRRescorer.java
b/solr/contrib/ltr/src/java/org/apache/solr/ltr/LTRRescorer.java
index c388c26..ec82127 100644
--- a/solr/contrib/ltr/src/java/org/apache/solr/ltr/LTRRescorer.java
+++ b/solr/contrib/ltr/src/java/org/apache/solr/ltr/LTRRescorer.java
@@ -53,6 +53,21 @@ public class LTRRescorer extends Rescorer {
this.scoringQuery = scoringQuery;
}
+ final private static Comparator<ScoreDoc> docComparator =
Comparator.comparingInt(a -> a.doc);
+
+ final protected static Comparator<ScoreDoc> scoreComparator = (a, b) -> {
+ // Sort by score descending, then docID ascending:
+ if (a.score > b.score) {
+ return -1;
+ } else if (a.score < b.score) {
+ return 1;
+ } else {
+ // This subtraction can't overflow int
+ // because docIDs are >= 0:
+ return a.doc - b.doc;
+ }
+ };
+
protected static void heapAdjust(ScoreDoc[] hits, int size, int root) {
final ScoreDoc doc = hits[root];
final float score = doc.score;
@@ -126,36 +141,18 @@ public class LTRRescorer extends Rescorer {
scoreFeatures(searcher,topN, modelWeight, firstPassResults, leaves,
reranked);
// Must sort all documents that we reranked, and then select the top
- sortByScore(reranked);
+ Arrays.sort(reranked, scoreComparator);
return reranked;
}
+ @Deprecated
protected static void sortByScore(ScoreDoc[] reranked) {
- Arrays.sort(reranked, new Comparator<ScoreDoc>() {
- @Override
- public int compare(ScoreDoc a, ScoreDoc b) {
- // Sort by score descending, then docID ascending:
- if (a.score > b.score) {
- return -1;
- } else if (a.score < b.score) {
- return 1;
- } else {
- // This subtraction can't overflow int
- // because docIDs are >= 0:
- return a.doc - b.doc;
- }
- }
- });
+ Arrays.sort(reranked, scoreComparator);
}
protected static ScoreDoc[] getFirstPassDocsRanked(TopDocs firstPassTopDocs)
{
final ScoreDoc[] hits = firstPassTopDocs.scoreDocs;
- Arrays.sort(hits, new Comparator<ScoreDoc>() {
- @Override
- public int compare(ScoreDoc a, ScoreDoc b) {
- return a.doc - b.doc;
- }
- });
+ Arrays.sort(hits, docComparator);
assert firstPassTopDocs.totalHits.relation == TotalHits.Relation.EQUAL_TO;
return hits;
diff --git
a/solr/contrib/ltr/src/java/org/apache/solr/ltr/interleaving/LTRInterleavingRescorer.java
b/solr/contrib/ltr/src/java/org/apache/solr/ltr/interleaving/LTRInterleavingRescorer.java
index f71317c..082138b 100644
---
a/solr/contrib/ltr/src/java/org/apache/solr/ltr/interleaving/LTRInterleavingRescorer.java
+++
b/solr/contrib/ltr/src/java/org/apache/solr/ltr/interleaving/LTRInterleavingRescorer.java
@@ -18,6 +18,7 @@ package org.apache.solr.ltr.interleaving;
import java.io.IOException;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import java.util.Set;
@@ -104,7 +105,7 @@ public class LTRInterleavingRescorer extends LTRRescorer {
for (int i = 0; i < rerankingQueries.length; i++) {
if (originalRankingIndex == null || originalRankingIndex != i) {
- sortByScore(reRankedPerModel[i]);
+ Arrays.sort(reRankedPerModel[i], scoreComparator);
}
}