Skip to content

Commit

Permalink
Add BytesRefIterator to TermInSetQuery
Browse files Browse the repository at this point in the history
Addresses apache#13804

TermInSetQuery used to have an accessor to its terms that was removed in apache#12173
to protect leaking internal encoding details. This introduces an accessor to the
term data in the query that doesn't expose internal but merely allows iterating
over the decoded BytesRef, making inspection of the querys content possible again.
  • Loading branch information
cbuescher committed Sep 18, 2024
1 parent 6d987e1 commit 9d60804
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,7 @@
import org.apache.lucene.index.Term;
import org.apache.lucene.index.Terms;
import org.apache.lucene.index.TermsEnum;
import org.apache.lucene.util.Accountable;
import org.apache.lucene.util.AttributeSource;
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.BytesRefBuilder;
import org.apache.lucene.util.BytesRefComparator;
import org.apache.lucene.util.RamUsageEstimator;
import org.apache.lucene.util.StringSorter;
import org.apache.lucene.util.*;
import org.apache.lucene.util.automaton.Automata;
import org.apache.lucene.util.automaton.Automaton;
import org.apache.lucene.util.automaton.ByteRunAutomaton;
Expand Down Expand Up @@ -141,6 +135,11 @@ public long getTermsCount() {
return termData.size();
}

public BytesRefIterator getBytesRefIterator() {
final TermIterator iterator = this.termData.iterator();
return () -> iterator.next();
}

@Override
public void visit(QueryVisitor visitor) {
if (visitor.acceptField(field) == false) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@
import org.apache.lucene.tests.util.RamUsageTester;
import org.apache.lucene.tests.util.TestUtil;
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.BytesRefIterator;
import org.apache.lucene.util.IOUtils;
import org.apache.lucene.util.automaton.ByteRunAutomaton;

Expand Down Expand Up @@ -527,4 +528,19 @@ public void consumeTermsMatching(
}
});
}

public void testTermsIterator() throws IOException {
TermInSetQuery empty = new TermInSetQuery("field", Collections.emptyList());
BytesRefIterator it = empty.getBytesRefIterator();
assertNull(it.next());

TermInSetQuery query =
new TermInSetQuery(
"field", List.of(newBytesRef("term1"), newBytesRef("term2"), newBytesRef("term3")));
it = query.getBytesRefIterator();
assertEquals(newBytesRef("term1"), it.next());
assertEquals(newBytesRef("term2"), it.next());
assertEquals(newBytesRef("term3"), it.next());
assertNull(it.next());
}
}

0 comments on commit 9d60804

Please sign in to comment.