You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by gs...@apache.org on 2021/08/01 19:05:52 UTC
[lucene-solr] branch branch_8x updated: LUCENE-10030: Lazily
evaluate score in DrillSidewaysScorer.doQueryFirstScoring (#2542)
This is an automated email from the ASF dual-hosted git repository.
gsmiller 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 c7210e4 LUCENE-10030: Lazily evaluate score in DrillSidewaysScorer.doQueryFirstScoring (#2542)
c7210e4 is described below
commit c7210e494e165b66673000df6ae43a32702800cf
Author: Greg Miller <gs...@gmail.com>
AuthorDate: Sun Aug 1 12:05:35 2021 -0700
LUCENE-10030: Lazily evaluate score in DrillSidewaysScorer.doQueryFirstScoring (#2542)
---
lucene/CHANGES.txt | 3 +++
.../apache/lucene/facet/DrillSidewaysScorer.java | 24 ++++++++++++++--------
2 files changed, 19 insertions(+), 8 deletions(-)
diff --git a/lucene/CHANGES.txt b/lucene/CHANGES.txt
index 71b6532..0dd0ffd 100644
--- a/lucene/CHANGES.txt
+++ b/lucene/CHANGES.txt
@@ -55,6 +55,9 @@ Improvements
characters as boundaries for incremental processing, vastly improving worst-case
performance. (Michael Gibney)
+* LUCENE-10030: Lazily evaluate score in DrillSidewaysScorer.doQueryFirstScoring
+ (Grigoriy Troitskiy)
+
Optimizations
---------------------
diff --git a/lucene/facet/src/java/org/apache/lucene/facet/DrillSidewaysScorer.java b/lucene/facet/src/java/org/apache/lucene/facet/DrillSidewaysScorer.java
index ddace0d..365431c 100644
--- a/lucene/facet/src/java/org/apache/lucene/facet/DrillSidewaysScorer.java
+++ b/lucene/facet/src/java/org/apache/lucene/facet/DrillSidewaysScorer.java
@@ -27,6 +27,7 @@ import org.apache.lucene.search.Collector;
import org.apache.lucene.search.DocIdSetIterator;
import org.apache.lucene.search.LeafCollector;
import org.apache.lucene.search.Scorable;
+import org.apache.lucene.search.ScoreCachingWrappingScorer;
import org.apache.lucene.search.Scorer;
import org.apache.lucene.search.TwoPhaseIterator;
import org.apache.lucene.util.Bits;
@@ -82,17 +83,13 @@ class DrillSidewaysScorer extends BulkScorer {
// System.out.println("\nscore: reader=" + context.reader());
//}
//System.out.println("score r=" + context.reader());
- ScoreAndDoc scorer = new ScoreAndDoc();
- collector.setScorer(scorer);
if (drillDownCollector != null) {
drillDownLeafCollector = drillDownCollector.getLeafCollector(context);
- drillDownLeafCollector.setScorer(scorer);
} else {
drillDownLeafCollector = null;
}
for (DocsAndCost dim : dims) {
dim.sidewaysLeafCollector = dim.sidewaysCollector.getLeafCollector(context);
- dim.sidewaysLeafCollector.setScorer(scorer);
}
// some scorers, eg ReqExlScorer, can hit NPE if cost is called after nextDoc
@@ -149,6 +146,8 @@ class DrillSidewaysScorer extends BulkScorer {
//if (DEBUG) {
// System.out.println(" doQueryFirstScoring");
//}
+ setScorer(collector, ScoreCachingWrappingScorer.wrap(baseScorer));
+
int docID = baseScorer.docID();
nextDoc: while (docID != PostingsEnum.NO_MORE_DOCS) {
@@ -188,10 +187,6 @@ class DrillSidewaysScorer extends BulkScorer {
collectDocID = docID;
- // TODO: we could score on demand instead since we are
- // daat here:
- collectScore = baseScorer.score();
-
if (failedCollector == null) {
// Hit passed all filters, so it's "real":
collectHit(collector, dims);
@@ -207,6 +202,8 @@ class DrillSidewaysScorer extends BulkScorer {
/** Used when drill downs are highly constraining vs
* baseQuery. */
private void doDrillDownAdvanceScoring(Bits acceptDocs, LeafCollector collector, DocsAndCost[] dims) throws IOException {
+ setScorer(collector, new ScoreAndDoc());
+
final int maxDoc = context.reader().maxDoc();
final int numDims = dims.length;
@@ -409,6 +406,7 @@ class DrillSidewaysScorer extends BulkScorer {
//if (DEBUG) {
// System.out.println(" doUnionScoring");
//}
+ setScorer(collector, new ScoreAndDoc());
final int maxDoc = context.reader().maxDoc();
final int numDims = dims.length;
@@ -580,6 +578,16 @@ class DrillSidewaysScorer extends BulkScorer {
sidewaysCollector.collect(collectDocID);
}
+ private void setScorer(LeafCollector mainCollector, Scorable scorer) throws IOException {
+ mainCollector.setScorer(scorer);
+ if (drillDownLeafCollector != null) {
+ drillDownLeafCollector.setScorer(scorer);
+ }
+ for (DocsAndCost dim : dims) {
+ dim.sidewaysLeafCollector.setScorer(scorer);
+ }
+ }
+
private final class ScoreAndDoc extends Scorable {
@Override