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);
       }
     }