public abstract class MultiTermQuery extends Query
Query
that matches documents
containing a subset of terms provided by a FilteredTermsEnum
enumeration.
This query cannot be used directly; you must subclass
it and define getTermsEnum(Terms,AttributeSource)
to provide a FilteredTermsEnum
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 org.apache.lucene.queryparser.classic.QueryParser produces
MultiTermQueries using CONSTANT_SCORE_AUTO_REWRITE_DEFAULT
by default.
Modifier and Type | Class and 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 and 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.
|
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 and Description |
---|
MultiTermQuery(String field)
Constructs a query matching terms that cannot be represented with a single
Term.
|
Modifier and Type | Method and Description |
---|---|
boolean |
equals(Object obj) |
String |
getField()
Returns the field name for this query
|
MultiTermQuery.RewriteMethod |
getRewriteMethod() |
int |
hashCode() |
Query |
rewrite(IndexReader reader)
To rewrite to a simpler form, instead return a simpler
enum from
getTermsEnum(Terms, AttributeSource) . |
void |
setRewriteMethod(MultiTermQuery.RewriteMethod method)
Sets the rewrite method to be used when executing the
query.
|
clone, createWeight, extractTerms, getBoost, setBoost, toString, toString
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(String field)
public final String getField()
public final Query rewrite(IndexReader reader) throws IOException
getTermsEnum(Terms, AttributeSource)
. For example,
to rewrite to a single term, return a SingleTermsEnum
rewrite
in class Query
IOException
public MultiTermQuery.RewriteMethod getRewriteMethod()
public void setRewriteMethod(MultiTermQuery.RewriteMethod method)
MultiTermQuery.RewriteMethod
.Copyright © 2010 - 2020 Adobe. All Rights Reserved