You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@solr.apache.org by cp...@apache.org on 2021/07/22 16:29:35 UTC
[solr] branch main updated: SOLR-15537: split 10-args
LTRRescorer.scoreSingleHit method (#192)
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 1e3ee66 SOLR-15537: split 10-args LTRRescorer.scoreSingleHit method (#192)
1e3ee66 is described below
commit 1e3ee66305a6786984d579727cccf3af9e5f13b8
Author: Christine Poerschke <cp...@apache.org>
AuthorDate: Thu Jul 22 17:29:27 2021 +0100
SOLR-15537: split 10-args LTRRescorer.scoreSingleHit method (#192)
---
.../src/java/org/apache/solr/ltr/LTRRescorer.java | 45 +++++++++++++++++-----
.../ltr/interleaving/LTRInterleavingRescorer.java | 5 ++-
2 files changed, 39 insertions(+), 11 deletions(-)
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 3c1f85b..0f1f2c9 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
@@ -178,13 +178,41 @@ public class LTRRescorer extends Rescorer {
docBase = readerContext.docBase;
scorer = modelWeight.scorer(readerContext);
}
- scoreSingleHit(indexSearcher, topN, modelWeight, docBase, hitUpto, hit, docID, scoringQuery, scorer, reranked);
+ if (scoreSingleHit(topN, docBase, hitUpto, hit, docID, scorer, reranked)) {
+ logSingleHit(indexSearcher, modelWeight, hit.doc, scoringQuery);
+ }
hitUpto++;
}
}
+ /**
+ * @deprecated Use {@link #scoreSingleHit(int, int, int, ScoreDoc, int, org.apache.solr.ltr.LTRScoringQuery.ModelWeight.ModelScorer, ScoreDoc[])}
+ * and {@link #logSingleHit(IndexSearcher, org.apache.solr.ltr.LTRScoringQuery.ModelWeight, int, LTRScoringQuery)} instead.
+ */
+ @Deprecated
protected static void scoreSingleHit(IndexSearcher indexSearcher, int topN, LTRScoringQuery.ModelWeight modelWeight, int docBase, int hitUpto, ScoreDoc hit, int docID, LTRScoringQuery rerankingQuery, LTRScoringQuery.ModelWeight.ModelScorer scorer, ScoreDoc[] reranked) throws IOException {
- final FeatureLogger featureLogger = rerankingQuery.getFeatureLogger();
+ if (scoreSingleHit(topN, docBase, hitUpto, hit, docID, scorer, reranked)) {
+ logSingleHit(indexSearcher, modelWeight, hit.doc, rerankingQuery);
+ }
+ }
+
+ /**
+ * Call this method if the {@link #scoreSingleHit(int, int, int, ScoreDoc, int, org.apache.solr.ltr.LTRScoringQuery.ModelWeight.ModelScorer, ScoreDoc[])}
+ * method indicated that the document's feature info should be logged.
+ */
+ protected static void logSingleHit(IndexSearcher indexSearcher, LTRScoringQuery.ModelWeight modelWeight, int docid, LTRScoringQuery scoringQuery) {
+ final FeatureLogger featureLogger = scoringQuery.getFeatureLogger();
+ if (featureLogger != null && indexSearcher instanceof SolrIndexSearcher) {
+ featureLogger.log(docid, scoringQuery, (SolrIndexSearcher)indexSearcher, modelWeight.getFeaturesInfo());
+ }
+ }
+
+ /**
+ * Scores a single document and returns true if the document's feature info should be logged via the
+ * {@link #logSingleHit(IndexSearcher, org.apache.solr.ltr.LTRScoringQuery.ModelWeight, int, LTRScoringQuery)}
+ * method. Feature info logging is only necessary for the topN documents.
+ */
+ protected static boolean scoreSingleHit(int topN, int docBase, int hitUpto, ScoreDoc hit, int docID, LTRScoringQuery.ModelWeight.ModelScorer scorer, ScoreDoc[] reranked) throws IOException {
// Scorer for a LTRScoringQuery.ModelWeight should never be null since we always have to
// call score
// even if no feature scorers match, since a model might use that info to
@@ -198,16 +226,15 @@ public class LTRRescorer extends Rescorer {
scorer.docID();
scorer.iterator().advance(targetDoc);
+ boolean logHit = false;
+
scorer.getDocInfo().setOriginalDocScore(hit.score);
hit.score = scorer.score();
if (hitUpto < topN) {
reranked[hitUpto] = hit;
// if the heap is not full, maybe I want to log the features for this
// document
- if (featureLogger != null && indexSearcher instanceof SolrIndexSearcher) {
- featureLogger.log(hit.doc, rerankingQuery, (SolrIndexSearcher) indexSearcher,
- modelWeight.getFeaturesInfo());
- }
+ logHit = true;
} else if (hitUpto == topN) {
// collected topN document, I create the heap
heapify(reranked, topN);
@@ -221,12 +248,10 @@ public class LTRRescorer extends Rescorer {
if (hit.score > reranked[0].score) {
reranked[0] = hit;
heapAdjust(reranked, topN, 0);
- if (featureLogger != null && indexSearcher instanceof SolrIndexSearcher) {
- featureLogger.log(hit.doc, rerankingQuery, (SolrIndexSearcher) indexSearcher,
- modelWeight.getFeaturesInfo());
- }
+ logHit = true;
}
}
+ return logHit;
}
@Override
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 082138b..799f4d9 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
@@ -142,7 +142,10 @@ public class LTRInterleavingRescorer extends LTRRescorer {
}
for (int i = 0; i < rerankingQueries.length; i++) {
if (modelWeights[i] != null) {
- scoreSingleHit(indexSearcher, topN, modelWeights[i], docBase, hitUpto, new ScoreDoc(hit.doc, hit.score, hit.shardIndex), docID, rerankingQueries[i], scorers[i], rerankedPerModel[i]);
+ final ScoreDoc hit_i = new ScoreDoc(hit.doc, hit.score, hit.shardIndex);
+ if (scoreSingleHit(topN, docBase, hitUpto, hit_i, docID, scorers[i], rerankedPerModel[i])) {
+ logSingleHit(indexSearcher, modelWeights[i], hit_i.doc, rerankingQueries[i]);
+ }
}
}
hitUpto++;