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 2023/03/06 17:12:07 UTC
[lucene] branch branch_9x updated: Better PostingsEnum reuse in MultiTermQueryConstantScoreBlendedWrapper (#12179)
This is an automated email from the ASF dual-hosted git repository.
gsmiller pushed a commit to branch branch_9x
in repository https://gitbox.apache.org/repos/asf/lucene.git
The following commit(s) were added to refs/heads/branch_9x by this push:
new d58ae7fb246 Better PostingsEnum reuse in MultiTermQueryConstantScoreBlendedWrapper (#12179)
d58ae7fb246 is described below
commit d58ae7fb246de44d17299197c1708fe5d929dfe3
Author: Greg Miller <gs...@gmail.com>
AuthorDate: Mon Mar 6 09:09:52 2023 -0800
Better PostingsEnum reuse in MultiTermQueryConstantScoreBlendedWrapper (#12179)
---
lucene/CHANGES.txt | 2 ++
.../lucene/search/MultiTermQueryConstantScoreBlendedWrapper.java | 9 +++++----
2 files changed, 7 insertions(+), 4 deletions(-)
diff --git a/lucene/CHANGES.txt b/lucene/CHANGES.txt
index b2fe5279c05..1ae1fa30d7b 100644
--- a/lucene/CHANGES.txt
+++ b/lucene/CHANGES.txt
@@ -54,6 +54,8 @@ Optimizations
* GITHUB#12139: Faster indexing of string fields. (Adrien Grand)
+* GITHUB#12179: Better PostingsEnum reuse in MultiTermQueryConstantScoreBlendedWrapper. (Greg Miller)
+
Bug Fixes
---------------------
diff --git a/lucene/core/src/java/org/apache/lucene/search/MultiTermQueryConstantScoreBlendedWrapper.java b/lucene/core/src/java/org/apache/lucene/search/MultiTermQueryConstantScoreBlendedWrapper.java
index 0247a34d25a..a598f644d0c 100644
--- a/lucene/core/src/java/org/apache/lucene/search/MultiTermQueryConstantScoreBlendedWrapper.java
+++ b/lucene/core/src/java/org/apache/lucene/search/MultiTermQueryConstantScoreBlendedWrapper.java
@@ -64,21 +64,22 @@ final class MultiTermQueryConstantScoreBlendedWrapper<Q extends MultiTermQuery>
};
// Handle the already-collected terms:
+ PostingsEnum reuse = null;
if (collectedTerms.isEmpty() == false) {
TermsEnum termsEnum2 = terms.iterator();
for (TermAndState t : collectedTerms) {
termsEnum2.seekExact(t.term, t.state);
- PostingsEnum postings = termsEnum2.postings(null, PostingsEnum.NONE);
+ reuse = termsEnum2.postings(reuse, PostingsEnum.NONE);
if (t.docFreq <= POSTINGS_PRE_PROCESS_THRESHOLD) {
- otherTerms.add(postings);
+ otherTerms.add(reuse);
} else {
- highFrequencyTerms.add(postings);
+ highFrequencyTerms.add(reuse);
+ reuse = null; // can't reuse since we haven't processed the postings
}
}
}
// Then collect remaining terms:
- PostingsEnum reuse = null;
do {
reuse = termsEnum.postings(reuse, PostingsEnum.NONE);
// If a term contains all docs with a value for the specified field, we can discard the