Class TermInSetQuery

  • All Implemented Interfaces:
    Accountable

    public class TermInSetQuery
    extends MultiTermQuery
    implements Accountable
    Specialization for a disjunction over many terms that, by default, behaves like a ConstantScoreQuery over a BooleanQuery containing only BooleanClause.Occur.SHOULD clauses.

    For instance in the following example, both q1 and q2 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, see MultiTermQuery.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). See MultiTermQuery documentation for more rewrite options.

    NOTE: This query produces scores that are equal to its boost

    • Method Detail

      • visit

        public void visit​(QueryVisitor visitor)
        Description copied from class: Query
        Recurse through the query tree, visiting any child queries
        Specified by:
        visit in class Query
        Parameters:
        visitor - a QueryVisitor to be called by each query in the tree
      • equals

        public boolean equals​(Object other)
        Description copied from class: Query
        Override and implement query instance equivalence properly in a subclass. This is required so that QueryCache 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 that other instance. Utility methods are provided for certain repetitive code.

        Overrides:
        equals in class MultiTermQuery
        See Also:
        Query.sameClassAs(Object), Query.classHash()
      • 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 directly
        Returns the terms wrapped in a PrefixCodedTerms.
      • toString

        public String toString​(String defaultField)
        Description copied from class: Query
        Prints a query to a string, with field assumed to be the default field and omitted.
        Specified by:
        toString in class Query
      • 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 interface Accountable