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

  • Constructor Details

  • Method Details

    • getTermsCount

      public long getTermsCount() throws 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 class MultiTermQuery
      Throws:
      IOException
    • 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 to those of the other instance. Utility methods are provided for certain repetitive code.

      Overrides:
      equals in class MultiTermQuery
      See Also:
    • hashCode

      public int hashCode()
      Description copied from class: Query
      Override and implement query hash code properly in a subclass. This is required so that QueryCache works properly.
      Overrides:
      hashCode in class MultiTermQuery
      See Also:
    • 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
    • getChildResources

      public 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 interface Accountable
      See Also:
    • getTermsEnum

      protected TermsEnum getTermsEnum(Terms terms, AttributeSource atts) throws 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 return TermsEnum.EMPTY if no terms match). The TermsEnum must already be positioned to the first matching term. The given AttributeSource is passed by the MultiTermQuery.RewriteMethod to share information between segments, for example TopTermsRewrite uses it to share maximum competitive boosts
      Specified by:
      getTermsEnum in class MultiTermQuery
      Throws:
      IOException