- java.lang.Object
-
- org.apache.lucene.search.Query
-
- org.apache.lucene.search.MultiTermQuery
-
- org.apache.lucene.search.TermInSetQuery
-
- All Implemented Interfaces:
Accountable
public class TermInSetQuery extends MultiTermQuery implements Accountable
Specialization for a disjunction over many terms that, by default, behaves like aConstantScoreQuery
over aBooleanQuery
containing onlyBooleanClause.Occur.SHOULD
clauses.For instance in the following example, both
q1
andq2
would yield the same scores:Query q1 = new TermInSetQuery("field", new BytesRef("foo"), new BytesRef("bar")); BooleanQuery bq = new BooleanQuery(); bq.add(new TermQuery(new Term("field", "foo")), Occur.SHOULD); bq.add(new TermQuery(new Term("field", "bar")), Occur.SHOULD); Query q2 = new ConstantScoreQuery(bq);
Unless a custom
MultiTermQuery.RewriteMethod
is provided, this query executes like a regular disjunction where there are few terms. However, when there are many terms, instead of merging iterators on the fly, it will populate a bit set with matching docs for the least-costly terms and maintain a size-limited set of more costly iterators that are merged on the fly. For more details, seeMultiTermQuery.CONSTANT_SCORE_BLENDED_REWRITE
.Users may also provide a custom
MultiTermQuery.RewriteMethod
to define different execution behavior, such as relying on doc values (see:MultiTermQuery.DOC_VALUES_REWRITE
), or if scores are required (see:MultiTermQuery.SCORING_BOOLEAN_REWRITE
). SeeMultiTermQuery
documentation for more rewrite options.NOTE: This query produces scores that are equal to its boost
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private class
TermInSetQuery.SetEnum
Like a babyAutomatonTermsEnum
, ping-pong intersects the terms dict against our encoded query terms.-
Nested classes/interfaces inherited from class org.apache.lucene.search.MultiTermQuery
MultiTermQuery.RewriteMethod, MultiTermQuery.TopTermsBlendedFreqScoringRewrite, MultiTermQuery.TopTermsBoostOnlyBooleanQueryRewrite, MultiTermQuery.TopTermsScoringBooleanQueryRewrite
-
-
Field Summary
Fields Modifier and Type Field Description private static long
BASE_RAM_BYTES_USED
private java.lang.String
field
private PrefixCodedTerms
termData
private int
termDataHashCode
-
Fields inherited from class org.apache.lucene.search.MultiTermQuery
CONSTANT_SCORE_BLENDED_REWRITE, CONSTANT_SCORE_BOOLEAN_REWRITE, CONSTANT_SCORE_REWRITE, DOC_VALUES_REWRITE, rewriteMethod, SCORING_BOOLEAN_REWRITE
-
Fields inherited from interface org.apache.lucene.util.Accountable
NULL_ACCOUNTABLE
-
-
Constructor Summary
Constructors Modifier Constructor Description TermInSetQuery(java.lang.String field, java.util.Collection<BytesRef> terms)
private
TermInSetQuery(java.lang.String field, PrefixCodedTerms termData)
TermInSetQuery(java.lang.String field, BytesRef... terms)
TermInSetQuery(MultiTermQuery.RewriteMethod rewriteMethod, java.lang.String field, java.util.Collection<BytesRef> terms)
Creates a newTermInSetQuery
from the given collection of terms.TermInSetQuery(MultiTermQuery.RewriteMethod rewriteMethod, java.lang.String field, BytesRef... terms)
Creates a newTermInSetQuery
from the given array of terms.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description private ByteRunAutomaton
asByteRunAutomaton()
boolean
equals(java.lang.Object other)
Override and implement query instance equivalence properly in a subclass.private boolean
equalsTo(TermInSetQuery other)
java.util.Collection<Accountable>
getChildResources()
Returns nested resources of this class.PrefixCodedTerms
getTermData()
Deprecated.the encoded terms will no longer be exposed in a future major version; this is an implementation detail that could change at some point and shouldn't be relied on directlylong
getTermsCount()
Return the number of unique terms contained in this query, if known up-front.protected TermsEnum
getTermsEnum(Terms terms, AttributeSource atts)
Construct the enumeration to be used, expanding the pattern term.int
hashCode()
Override and implement query hash code properly in a subclass.private static PrefixCodedTerms
packTerms(java.lang.String field, java.util.Collection<BytesRef> terms)
long
ramBytesUsed()
Return the memory usage of this object in bytes.java.lang.String
toString(java.lang.String defaultField)
Prints a query to a string, withfield
assumed to be the default field and omitted.void
visit(QueryVisitor visitor)
Recurse through the query tree, visiting any child queries.-
Methods inherited from class org.apache.lucene.search.MultiTermQuery
getField, getRewriteMethod, getTermsEnum, rewrite, setRewriteMethod
-
Methods inherited from class org.apache.lucene.search.Query
classHash, createWeight, rewrite, sameClassAs, toString
-
-
-
-
Field Detail
-
BASE_RAM_BYTES_USED
private static final long BASE_RAM_BYTES_USED
-
field
private final java.lang.String field
-
termData
private final PrefixCodedTerms termData
-
termDataHashCode
private final int termDataHashCode
-
-
Constructor Detail
-
TermInSetQuery
public TermInSetQuery(java.lang.String field, java.util.Collection<BytesRef> terms)
-
TermInSetQuery
public TermInSetQuery(java.lang.String field, BytesRef... terms)
-
TermInSetQuery
public TermInSetQuery(MultiTermQuery.RewriteMethod rewriteMethod, java.lang.String field, java.util.Collection<BytesRef> terms)
Creates a newTermInSetQuery
from the given collection of terms.
-
TermInSetQuery
public TermInSetQuery(MultiTermQuery.RewriteMethod rewriteMethod, java.lang.String field, BytesRef... terms)
Creates a newTermInSetQuery
from the given array of terms.
-
TermInSetQuery
private TermInSetQuery(java.lang.String field, PrefixCodedTerms termData)
-
-
Method Detail
-
packTerms
private static PrefixCodedTerms packTerms(java.lang.String field, java.util.Collection<BytesRef> terms)
-
getTermsCount
public long getTermsCount() throws java.io.IOException
Description copied from class:MultiTermQuery
Return the number of unique terms contained in this query, if known up-front. If not known, -1 will be returned.- Overrides:
getTermsCount
in classMultiTermQuery
- Throws:
java.io.IOException
-
visit
public void visit(QueryVisitor visitor)
Description copied from class:Query
Recurse through the query tree, visiting any child queries.
-
asByteRunAutomaton
private ByteRunAutomaton asByteRunAutomaton()
-
equals
public boolean equals(java.lang.Object other)
Description copied from class:Query
Override and implement query instance equivalence properly in a subclass. This is required so thatQueryCache
works properly.Typically a query will be equal to another only if it's an instance of the same class and its document-filtering properties are identical to those of the other instance. Utility methods are provided for certain repetitive code.
- Overrides:
equals
in classMultiTermQuery
- See Also:
Query.sameClassAs(Object)
,Query.classHash()
-
equalsTo
private boolean equalsTo(TermInSetQuery other)
-
hashCode
public int hashCode()
Description copied from class:Query
Override and implement query hash code properly in a subclass. This is required so thatQueryCache
works properly.- Overrides:
hashCode
in classMultiTermQuery
- See Also:
Query.equals(Object)
-
getTermData
@Deprecated public PrefixCodedTerms getTermData()
Deprecated.the encoded terms will no longer be exposed in a future major version; this is an implementation detail that could change at some point and shouldn't be relied on directlyReturns the terms wrapped in a PrefixCodedTerms.
-
toString
public java.lang.String toString(java.lang.String defaultField)
Description copied from class:Query
Prints a query to a string, withfield
assumed to be the default field and omitted.
-
ramBytesUsed
public long ramBytesUsed()
Description copied from interface:Accountable
Return the memory usage of this object in bytes. Negative values are illegal.- Specified by:
ramBytesUsed
in interfaceAccountable
-
getChildResources
public java.util.Collection<Accountable> getChildResources()
Description copied from interface:Accountable
Returns nested resources of this class. The result should be a point-in-time snapshot (to avoid race conditions).- Specified by:
getChildResources
in interfaceAccountable
- See Also:
Accountables
-
getTermsEnum
protected TermsEnum getTermsEnum(Terms terms, AttributeSource atts) throws java.io.IOException
Description copied from class:MultiTermQuery
Construct the enumeration to be used, expanding the pattern term. This method should only be called if the field exists (ie, implementations can assume the field does exist). This method should not return null (should instead returnTermsEnum.EMPTY
if no terms match). The TermsEnum must already be positioned to the first matching term. The givenAttributeSource
is passed by theMultiTermQuery.RewriteMethod
to share information between segments, for exampleTopTermsRewrite
uses it to share maximum competitive boosts- Specified by:
getTermsEnum
in classMultiTermQuery
- Throws:
java.io.IOException
-
-