Serializable
, Cloneable
FuzzyQuery
, NumericRangeQuery
, PrefixQuery
, RegexQuery
, TermRangeQuery
, WildcardQuery
public abstract class MultiTermQuery extends Query
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.
Modifier and Type | Class | Description |
---|---|---|
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. |
Modifier and Type | Field | Description |
---|---|---|
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 | Description |
---|---|
MultiTermQuery() |
Constructs a query matching terms that cannot be represented with a single
Term.
|
Modifier and Type | Method | Description |
---|---|---|
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.
|
finalize, getClass, notify, notifyAll, wait, wait, wait
clone, combine, createWeight, extractTerms, getBoost, getSimilarity, mergeBooleanQueries, setBoost, toString, toString, weight
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.
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()
.
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()
.
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.public MultiTermQuery()
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()
public void setRewriteMethod(MultiTermQuery.RewriteMethod method)
MultiTermQuery.RewriteMethod
.Copyright © 2000-2018 Apache Software Foundation. All Rights Reserved.