## org.apache.lucene.search.spans
Class SpanMultiTermQueryWrapper<Q extends MultiTermQuery>

    java.lang.Object
      org.apache.lucene.search.Query
          org.apache.lucene.search.spans.SpanQuery
              org.apache.lucene.search.spans.SpanMultiTermQueryWrapper<Q>

All Implemented Interfaces:
  Serializable, Cloneable

Direct Known Subclasses:
  SpanRegexQuery

    public class SpanMultiTermQueryWrapper<Q extends MultiTermQuery>

extends SpanQuery

Wraps any `MultiTermQuery` as a `SpanQuery`, so it can be nested within other SpanQuery classes.

The query is rewritten by default to a `SpanOrQuery` containing the expanded terms, but this can be customized.

Example:

>      WildcardQuery wildcard = new WildcardQuery(new Term("field", "bro?n"));
>      SpanQuery spanWildcard = new SpanMultiTermQueryWrapper<WildcardQuery>(wildcard);
>      // do something with spanWildcard, such as use it in a SpanFirstQuery

See Also:
  Serialized Form

Nested Class Summary
`static class` `SpanMultiTermQueryWrapper.SpanRewriteMethod` Abstract class that defines how the query is rewritten.
`static class` `SpanMultiTermQueryWrapper.TopTermsSpanBooleanQueryRewrite` A rewrite method that first translates each term into a SpanTermQuery in a `BooleanClause.Occur.SHOULD` clause in a BooleanQuery, and keeps the scores as computed by the query.

Field Summary
`protected Q` `query`
`static SpanMultiTermQueryWrapper.SpanRewriteMethod` `SCORING_SPAN_QUERY_REWRITE` A rewrite method that first translates each term into a SpanTermQuery in a `BooleanClause.Occur.SHOULD` clause in a BooleanQuery, and keeps the scores as computed by the query.

Constructor Summary
`SpanMultiTermQueryWrapper(Q query)` Create a new SpanMultiTermQueryWrapper.

Method Summary
`boolean` `equals(Object obj)`
`String` `getField()` Returns the name of the field matched by this query.
`SpanMultiTermQueryWrapper.SpanRewriteMethod` `getRewriteMethod()` Expert: returns the rewriteMethod
`Spans` `getSpans(IndexReader reader)` Expert: Returns the matches for this query in an index.
`int` `hashCode()`
`Query` `rewrite(IndexReader reader)` Expert: called to re-write queries into primitive queries.
`void` `setRewriteMethod(SpanMultiTermQueryWrapper.SpanRewriteMethod rewriteMethod)` Expert: sets the rewrite method.
`String` `toString(String field)` Prints a query to a string, with `field` assumed to be the default field and omitted.

Methods inherited from class org.apache.lucene.search.spans.SpanQuery
`createWeight`

Methods inherited from class org.apache.lucene.search.Query
`clone, combine, extractTerms, getBoost, getSimilarity, mergeBooleanQueries, setBoost, toString, weight`

Methods inherited from class java.lang.Object
`finalize, getClass, notify, notifyAll, wait, wait, wait`

Field Detail

### query

    protected final Q extends MultiTermQuery query

### SCORING_SPAN_QUERY_REWRITE

    public static final SpanMultiTermQueryWrapper.SpanRewriteMethod SCORING_SPAN_QUERY_REWRITE

  A rewrite method that first translates each term into a SpanTermQuery in a `BooleanClause.Occur.SHOULD` clause in a BooleanQuery, and keeps the scores as computed by the query.

  See Also:
    `setRewriteMethod(org.apache.lucene.search.spans.SpanMultiTermQueryWrapper.SpanRewriteMethod)`

Constructor Detail

### SpanMultiTermQueryWrapper

    public SpanMultiTermQueryWrapper(Q query)

  Create a new SpanMultiTermQueryWrapper.

  Parameters:
    `query` - Query to wrap.

    NOTE: This will call `MultiTermQuery.setRewriteMethod(MultiTermQuery.RewriteMethod)` on the wrapped `query`, changing its rewrite method to a suitable one for spans. Be sure to not change the rewrite method on the wrapped query afterwards! Doing so will throw `UnsupportedOperationException` on rewriting this query! In Lucene 3.x, MultiTermQuery allows queries to rewrite to different field names, but SpanQuery needs a fixed field. The wrapped query must therefore support getField() or getTerm().

  Throws:
    `IllegalArgumentException` - if the wrapped query does not provide getField() or getTerm().

Method Detail

### getRewriteMethod

    public final SpanMultiTermQueryWrapper.SpanRewriteMethod getRewriteMethod()

  Expert: returns the rewriteMethod

### setRewriteMethod

    public final void setRewriteMethod(SpanMultiTermQueryWrapper.SpanRewriteMethod rewriteMethod)

  Expert: sets the rewrite method. This only makes sense to be a span rewrite method.

### getSpans

    public Spans getSpans(IndexReader reader)
                   throws IOException

  Description copied from class: `SpanQuery`
  Expert: Returns the matches for this query in an index. Used internally to search for spans.

  Specified by:
    `getSpans` in class `SpanQuery`
  Throws:
    `IOException`

### getField

    public String getField()

  Description copied from class: `SpanQuery`
  Returns the name of the field matched by this query.

  Specified by:
    `getField` in class `SpanQuery`

### toString

    public String toString(String field)

  Description copied from class: `Query`
  Prints a query to a string, with `field` assumed to be the default field and omitted.

  The representation used is one that is supposed to be readable by `QueryParser`. However, there are the following limitations:

  - If the query was created by the parser, the printed representation may not be exactly what was parsed. For example, characters that need to be escaped will be represented without the required backslash.
  - Some of the more complicated queries (e.g. span queries) don't have a representation that can be parsed by QueryParser.

  Specified by:
    `toString` in class `Query`

### rewrite

    public Query rewrite(IndexReader reader)
                  throws IOException

  Description copied from class: `Query`
  Expert: called to re-write queries into primitive queries. For example, a PrefixQuery will be rewritten into a BooleanQuery that consists of TermQuerys.

  Overrides:
    `rewrite` in class `Query`
  Throws:
    `IOException`

### hashCode

    public int hashCode()

  Overrides:
    `hashCode` in class `Query`

### equals

    public boolean equals(Object obj)

  Overrides:
    `equals` in class `Query`