Package org.apache.lucene.search

## Class TermInSetQuery

- 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 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

- - ### Nested Class Summary

    - ### Nested classes/interfaces inherited from class org.apache.lucene.search.MultiTermQuery

      `MultiTermQuery.RewriteMethod, MultiTermQuery.TopTermsBlendedFreqScoringRewrite, MultiTermQuery.TopTermsBoostOnlyBooleanQueryRewrite, MultiTermQuery.TopTermsScoringBooleanQueryRewrite`

  - ### Field Summary

    - ### 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
    Constructor | Description
    --- | ---
    `TermInSetQuery​(String field, Collection<BytesRef> terms)` |
    `TermInSetQuery​(String field, BytesRef... terms)` | Deprecated. Use `TermInSetQuery(String, Collection)` instead.
    `TermInSetQuery​(MultiTermQuery.RewriteMethod rewriteMethod, String field, Collection<BytesRef> terms)` | Creates a new `TermInSetQuery` from the given collection of terms.
    `TermInSetQuery​(MultiTermQuery.RewriteMethod rewriteMethod, String field, BytesRef... terms)` | Deprecated. Use `TermInSetQuery(RewriteMethod, String, Collection)` instead.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods Deprecated Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `boolean` | `equals​(Object other)` | Override and implement query instance equivalence properly in a subclass.
    `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 directly
    `long` | `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.
    `long` | `ramBytesUsed()` | Return the memory usage of this object in bytes.
    `String` | `toString​(String defaultField)` | Prints a query to a string, with `field` 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`

    - ### Methods inherited from class java.lang.Object

      `clone, finalize, getClass, notify, notifyAll, wait, wait, wait`

- - ### Constructor Detail

    - #### TermInSetQuery

          public TermInSetQuery​(String field,
                                Collection<BytesRef> terms)

    - #### TermInSetQuery

          @Deprecated(since="9.10")
          public TermInSetQuery​(String field,
                                BytesRef... terms)

      Deprecated.
      Use `TermInSetQuery(String, Collection)` instead.

    - #### TermInSetQuery

          public TermInSetQuery​(MultiTermQuery.RewriteMethod rewriteMethod,
                                String field,
                                Collection<BytesRef> terms)

      Creates a new `TermInSetQuery` from the given collection of terms.

    - #### TermInSetQuery

          @Deprecated(since="9.10")
          public TermInSetQuery​(MultiTermQuery.RewriteMethod rewriteMethod,
                                String field,
                                BytesRef... terms)

      Deprecated.
      Use `TermInSetQuery(RewriteMethod, String, Collection)` instead.
      Creates a new `TermInSetQuery` from the given array of terms.

  - ### Method Detail

    - #### 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:
        `Query.sameClassAs(Object)`, `Query.classHash()`

    - #### 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:
        `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 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:
        `Accountables`

    - #### 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`