Skip to content

Commit 43bbc37

Browse files
committed
optimize term and terms filter that do no match any documents
1 parent e5d8f2d commit 43bbc37

File tree

2 files changed

+16
-7
lines changed

2 files changed

+16
-7
lines changed

modules/elasticsearch/src/main/java/org/apache/lucene/search/PublicTermsFilter.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ public boolean equals(Object obj) {
6464
@Override
6565
public int hashCode() {
6666
int hash = 9;
67-
for (Iterator<Term> iter = terms.iterator(); iter.hasNext();) {
67+
for (Iterator<Term> iter = terms.iterator(); iter.hasNext(); ) {
6868
Term term = iter.next();
6969
hash = 31 * hash + term.hashCode();
7070
}
@@ -73,13 +73,19 @@ public int hashCode() {
7373

7474
@Override
7575
public DocIdSet getDocIdSet(IndexReader reader) throws IOException {
76-
OpenBitSet result = new OpenBitSet(reader.maxDoc());
76+
OpenBitSet result = null;
7777
TermDocs td = reader.termDocs();
7878
try {
7979
for (Term term : terms) {
8080
td.seek(term);
81-
while (td.next()) {
81+
if (td.next()) {
82+
if (result == null) {
83+
result = new OpenBitSet(reader.maxDoc());
84+
}
8285
result.fastSet(td.doc());
86+
while (td.next()) {
87+
result.fastSet(td.doc());
88+
}
8389
}
8490
}
8591
} finally {

modules/elasticsearch/src/main/java/org/elasticsearch/common/lucene/search/TermFilter.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,15 +46,18 @@ public Term getTerm() {
4646
}
4747

4848
@Override public DocIdSet getDocIdSet(IndexReader reader) throws IOException {
49-
OpenBitSet result = new OpenBitSet(reader.maxDoc());
49+
OpenBitSet result = null;
5050
TermDocs td = reader.termDocs();
5151
try {
5252
td.seek(term);
53-
while (td.next()) {
53+
if (td.next()) {
54+
result = new OpenBitSet(reader.maxDoc());
5455
result.fastSet(td.doc());
56+
while (td.next()) {
57+
result.fastSet(td.doc());
58+
}
5559
}
56-
}
57-
finally {
60+
} finally {
5861
td.close();
5962
}
6063
return result;

0 commit comments

Comments
 (0)