You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by cp...@apache.org on 2021/07/21 16:57:13 UTC
[lucene-solr] branch branch_8x updated: SOLR-15496: Reuse
comparator objects in contrib/ltr rescorer classes. (#228)
This is an automated email from the ASF dual-hosted git repository.
cpoerschke pushed a commit to branch branch_8x
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git
The following commit(s) were added to refs/heads/branch_8x by this push:
new 27c085a SOLR-15496: Reuse comparator objects in contrib/ltr rescorer classes. (#228)
27c085a is described below
commit 27c085aa417b43df025b16ec3955d1c29613f777
Author: Marcos Pontes <mf...@gmail.com>
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 1c76cdc..14202fa 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -41,6 +41,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);
}
}