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:09:59 UTC
[lucene] branch main 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 main
in repository https://gitbox.apache.org/repos/asf/lucene.git
The following commit(s) were added to refs/heads/main by this push:
new b4f969c197c Better PostingsEnum reuse in MultiTermQueryConstantScoreBlendedWrapper (#12179)
b4f969c197c is described below
commit b4f969c197c0d0b582ca88fbe36e00b8e0d7d1f6
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 4e86d5aeff7..9ffa5010899 100644
--- a/lucene/CHANGES.txt
+++ b/lucene/CHANGES.txt
@@ -153,6 +153,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