|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object org.apache.lucene.search.Query org.apache.lucene.search.MultiTermQuery
public abstract class MultiTermQuery
An abstract Query
that matches documents
containing a subset of terms provided by a FilteredTermEnum
enumeration.
This query cannot be used directly; you must subclass
it and define getEnum(org.apache.lucene.index.IndexReader)
to provide a FilteredTermEnum
that iterates through the terms to be
matched.
NOTE: if setRewriteMethod(org.apache.lucene.search.MultiTermQuery.RewriteMethod)
is either
CONSTANT_SCORE_BOOLEAN_QUERY_REWRITE
or SCORING_BOOLEAN_QUERY_REWRITE
, you may encounter a
BooleanQuery.TooManyClauses
exception during
searching, which happens when the number of terms to be
searched exceeds BooleanQuery.getMaxClauseCount()
. Setting setRewriteMethod(org.apache.lucene.search.MultiTermQuery.RewriteMethod)
to CONSTANT_SCORE_FILTER_REWRITE
prevents this.
The recommended rewrite method is CONSTANT_SCORE_AUTO_REWRITE_DEFAULT
: it doesn't spend CPU
computing unhelpful scores, and it tries to pick the most
performant rewrite method given the query. If you
need scoring (like FuzzyQuery
, use
MultiTermQuery.TopTermsScoringBooleanQueryRewrite
which uses
a priority queue to only collect competitive terms
and not hit this limitation.
Note that QueryParser
produces
MultiTermQueries using CONSTANT_SCORE_AUTO_REWRITE_DEFAULT
by default.
Nested Class Summary | |
---|---|
static class |
MultiTermQuery.ConstantScoreAutoRewrite
A rewrite method that tries to pick the best constant-score rewrite method based on term and document counts from the query. |
static class |
MultiTermQuery.RewriteMethod
Abstract class that defines how the query is rewritten. |
static class |
MultiTermQuery.TopTermsBoostOnlyBooleanQueryRewrite
A rewrite method that first translates each term into BooleanClause.Occur.SHOULD clause in a BooleanQuery, but the scores
are only computed as the boost. |
static class |
MultiTermQuery.TopTermsScoringBooleanQueryRewrite
A rewrite method that first translates each term into BooleanClause.Occur.SHOULD clause in a BooleanQuery, and keeps the
scores as computed by the query. |
Field Summary | |
---|---|
static MultiTermQuery.RewriteMethod |
CONSTANT_SCORE_AUTO_REWRITE_DEFAULT
Read-only default instance of MultiTermQuery.ConstantScoreAutoRewrite , with ConstantScoreAutoRewrite.setTermCountCutoff(int) set to
ConstantScoreAutoRewrite.DEFAULT_TERM_COUNT_CUTOFF
and ConstantScoreAutoRewrite.setDocCountPercent(double) set to
ConstantScoreAutoRewrite.DEFAULT_DOC_COUNT_PERCENT . |
static MultiTermQuery.RewriteMethod |
CONSTANT_SCORE_BOOLEAN_QUERY_REWRITE
Like SCORING_BOOLEAN_QUERY_REWRITE except
scores are not computed. |
static MultiTermQuery.RewriteMethod |
CONSTANT_SCORE_FILTER_REWRITE
A rewrite method that first creates a private Filter, by visiting each term in sequence and marking all docs for that term. |
protected MultiTermQuery.RewriteMethod |
rewriteMethod
|
static MultiTermQuery.RewriteMethod |
SCORING_BOOLEAN_QUERY_REWRITE
A rewrite method that first translates each term into BooleanClause.Occur.SHOULD clause in a
BooleanQuery, and keeps the scores as computed by the
query. |
Constructor Summary | |
---|---|
MultiTermQuery()
Constructs a query matching terms that cannot be represented with a single Term. |
Method Summary | |
---|---|
void |
clearTotalNumberOfTerms()
Deprecated. Don't use this method, as its not thread safe and useless. |
boolean |
equals(Object obj)
|
protected abstract FilteredTermEnum |
getEnum(IndexReader reader)
Construct the enumeration to be used, expanding the pattern term. |
MultiTermQuery.RewriteMethod |
getRewriteMethod()
|
int |
getTotalNumberOfTerms()
Deprecated. Don't use this method, as its not thread safe and useless. |
int |
hashCode()
|
protected void |
incTotalNumberOfTerms(int inc)
Deprecated. Don't use this method, as its not thread safe and useless. |
Query |
rewrite(IndexReader reader)
To rewrite to a simpler form, instead return a simpler enum from getEnum(IndexReader) . |
void |
setRewriteMethod(MultiTermQuery.RewriteMethod method)
Sets the rewrite method to be used when executing the query. |
Methods inherited from class org.apache.lucene.search.Query |
---|
clone, combine, createWeight, extractTerms, getBoost, getSimilarity, mergeBooleanQueries, setBoost, toString, toString, weight |
Methods inherited from class java.lang.Object |
---|
finalize, getClass, notify, notifyAll, wait, wait, wait |
Field Detail |
---|
protected MultiTermQuery.RewriteMethod rewriteMethod
public static final MultiTermQuery.RewriteMethod CONSTANT_SCORE_FILTER_REWRITE
This method is faster than the BooleanQuery
rewrite methods when the number of matched terms or
matched documents is non-trivial. Also, it will never
hit an errant BooleanQuery.TooManyClauses
exception.
setRewriteMethod(org.apache.lucene.search.MultiTermQuery.RewriteMethod)
public static final MultiTermQuery.RewriteMethod SCORING_BOOLEAN_QUERY_REWRITE
BooleanClause.Occur.SHOULD
clause in a
BooleanQuery, and keeps the scores as computed by the
query. Note that typically such scores are
meaningless to the user, and require non-trivial CPU
to compute, so it's almost always better to use CONSTANT_SCORE_AUTO_REWRITE_DEFAULT
instead.
NOTE: This rewrite method will hit BooleanQuery.TooManyClauses
if the number of terms
exceeds BooleanQuery.getMaxClauseCount()
.
setRewriteMethod(org.apache.lucene.search.MultiTermQuery.RewriteMethod)
public static final MultiTermQuery.RewriteMethod CONSTANT_SCORE_BOOLEAN_QUERY_REWRITE
SCORING_BOOLEAN_QUERY_REWRITE
except
scores are not computed. Instead, each matching
document receives a constant score equal to the
query's boost.
NOTE: This rewrite method will hit BooleanQuery.TooManyClauses
if the number of terms
exceeds BooleanQuery.getMaxClauseCount()
.
setRewriteMethod(org.apache.lucene.search.MultiTermQuery.RewriteMethod)
public static final MultiTermQuery.RewriteMethod CONSTANT_SCORE_AUTO_REWRITE_DEFAULT
MultiTermQuery.ConstantScoreAutoRewrite
, with ConstantScoreAutoRewrite.setTermCountCutoff(int)
set to
ConstantScoreAutoRewrite.DEFAULT_TERM_COUNT_CUTOFF
and ConstantScoreAutoRewrite.setDocCountPercent(double)
set to
ConstantScoreAutoRewrite.DEFAULT_DOC_COUNT_PERCENT
.
Note that you cannot alter the configuration of this
instance; you'll need to create a private instance
instead.
Constructor Detail |
---|
public MultiTermQuery()
Method Detail |
---|
protected abstract FilteredTermEnum getEnum(IndexReader reader) throws IOException
IOException
@Deprecated public int getTotalNumberOfTerms()
This method is not thread safe, be sure to only call it when no query is running!
If you re-use the same query instance for another
search, be sure to first reset the term counter
with clearTotalNumberOfTerms()
.
On single-segment indexes / no MultiReaders, you get the correct number of unique terms for the whole index. Use this number to compare different queries. For multi-segment indexes this number can also be achieved in non-constant-score mode. In constant-score mode you get the total number of terms seeked for all segments / sub-readers.
clearTotalNumberOfTerms()
@Deprecated public void clearTotalNumberOfTerms()
getTotalNumberOfTerms()
@Deprecated protected void incTotalNumberOfTerms(int inc)
public final Query rewrite(IndexReader reader) throws IOException
getEnum(IndexReader)
. For example,
to rewrite to a single term, return a SingleTermEnum
rewrite
in class Query
IOException
public MultiTermQuery.RewriteMethod getRewriteMethod()
setRewriteMethod(org.apache.lucene.search.MultiTermQuery.RewriteMethod)
public void setRewriteMethod(MultiTermQuery.RewriteMethod method)
MultiTermQuery.RewriteMethod
.
public int hashCode()
hashCode
in class Query
public boolean equals(Object obj)
equals
in class Query
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |