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

java.lang.Object
  extended by org.apache.lucene.search.Query
      extended by org.apache.lucene.search.spans.SpanQuery
          extended by 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:

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