|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||
java.lang.Objectorg.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 QueryIOExceptionpublic MultiTermQuery.RewriteMethod getRewriteMethod()
setRewriteMethod(org.apache.lucene.search.MultiTermQuery.RewriteMethod)public void setRewriteMethod(MultiTermQuery.RewriteMethod method)
MultiTermQuery.RewriteMethod.
public int hashCode()
hashCode in class Querypublic boolean equals(Object obj)
equals in class Query
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||