public class PhraseWildcardQuery extends Query
PhraseQuery
, built with one or more MultiTermQuery
that provides term expansions for multi-terms (one of the expanded terms must match).
Its main advantage is to control the total number of expansions across all MultiTermQuery
and across all segments.
Use the PhraseWildcardQuery.Builder
to build a PhraseWildcardQuery
.
This query is similar to MultiPhraseQuery
, but it handles, controls and optimizes the
multi-term expansions.
This query is equivalent to building an ordered SpanNearQuery
with a list of SpanTermQuery
and
SpanMultiTermQueryWrapper
.
But it optimizes the multi-term expansions and the segment accesses.
It first resolves the single-terms to early stop if some does not match. Then
it expands each multi-term sequentially, stopping immediately if one does not
match. It detects the segments that do not match to skip them for the next
expansions. This often avoid expanding the other multi-terms on some or
even all segments. And finally it controls the total number of expansions.
Immutable.
Modifier and Type | Class and Description |
---|---|
static class |
PhraseWildcardQuery.Builder
Builds a
PhraseWildcardQuery . |
protected static class |
PhraseWildcardQuery.MultiTerm
Phrase term with expansions.
|
protected static class |
PhraseWildcardQuery.PhraseTerm
All
PhraseWildcardQuery.PhraseTerm are light and immutable. |
protected class |
PhraseWildcardQuery.SegmentTermsSizeComparator
Compares segments based of the number of terms they contain.
|
protected static class |
PhraseWildcardQuery.SingleTerm
Phrase term with no expansion.
|
static class |
PhraseWildcardQuery.TermBytesTermState
Holds a pair of term bytes - term state.
|
protected static class |
PhraseWildcardQuery.TermData
|
protected static class |
PhraseWildcardQuery.TermsData
Holds the
TermState and TermStatistics for all the matched
and collected Term , for all phrase terms, for all segments. |
static class |
PhraseWildcardQuery.TermStats
Accumulates the doc freq and total term freq.
|
protected static class |
PhraseWildcardQuery.TestCounters
Test counters incremented when assertions are enabled.
|
Modifier and Type | Field and Description |
---|---|
protected String |
field |
protected int |
maxMultiTermExpansions |
protected static Query |
NO_MATCH_QUERY |
protected List<PhraseWildcardQuery.PhraseTerm> |
phraseTerms |
protected boolean |
segmentOptimizationEnabled |
protected int |
slop |
Modifier | Constructor and Description |
---|---|
protected |
PhraseWildcardQuery(String field,
List<PhraseWildcardQuery.PhraseTerm> phraseTerms,
int slop,
int maxMultiTermExpansions,
boolean segmentOptimizationEnabled) |
classHash, sameClassAs, toString
protected static final Query NO_MATCH_QUERY
protected final String field
protected final List<PhraseWildcardQuery.PhraseTerm> phraseTerms
protected final int slop
protected final int maxMultiTermExpansions
protected final boolean segmentOptimizationEnabled
protected PhraseWildcardQuery(String field, List<PhraseWildcardQuery.PhraseTerm> phraseTerms, int slop, int maxMultiTermExpansions, boolean segmentOptimizationEnabled)
public String getField()
public Query rewrite(IndexReader reader) throws IOException
rewrite
in class Query
IOException
public void visit(QueryVisitor visitor)
public Weight createWeight(IndexSearcher searcher, ScoreMode scoreMode, float boost) throws IOException
createWeight
in class Query
IOException
protected PhraseWildcardQuery.TermsData createTermsData(int numSegments)
PhraseWildcardQuery.TermsData
.protected Weight earlyStopWeight()
protected Weight noMatchWeight()
protected int collectSingleTermData(PhraseWildcardQuery.SingleTerm singleTerm, IndexSearcher searcher, List<LeafReaderContext> segments, PhraseWildcardQuery.TermsData termsData) throws IOException
TermState
and TermStatistics
for a single-term
without expansion.termsData
- receives the collected data.IOException
protected int collectMultiTermData(PhraseWildcardQuery.MultiTerm multiTerm, IndexSearcher searcher, List<LeafReaderContext> segments, int remainingMultiTerms, int maxExpansionsForTerm, PhraseWildcardQuery.TermsData termsData) throws IOException
TermState
and TermStatistics
for a multi-term
with expansion.remainingMultiTerms
- the number of remaining multi-terms to process,
including the current one, excluding the multi-terms already processed.termsData
- receives the collected data.IOException
protected boolean shouldOptimizeSegments()
protected Map<BytesRef,PhraseWildcardQuery.TermStats> createTermStatsMap(PhraseWildcardQuery.MultiTerm multiTerm)
PhraseWildcardQuery.TermStats
map for a PhraseWildcardQuery.MultiTerm
.protected List<PhraseWildcardQuery.TermBytesTermState> collectMultiTermDataForSegment(PhraseWildcardQuery.MultiTerm multiTerm, LeafReaderContext leafReaderContext, int remainingExpansions, MutableValueBool shouldStopSegmentIteration, Map<BytesRef,PhraseWildcardQuery.TermStats> termStatsMap) throws IOException
TermState
list and TermStatistics
for a multi-term
on a specific index segment.remainingExpansions
- the number of remaining expansions allowed
for the segment.shouldStopSegmentIteration
- to be set to true to stop the segment
iteration calling this method repeatedly.termStatsMap
- receives the collected PhraseWildcardQuery.TermStats
across all segments.IOException
protected TermsEnum createTermsEnum(PhraseWildcardQuery.MultiTerm multiTerm, LeafReaderContext leafReaderContext) throws IOException
TermsEnum
for the given PhraseWildcardQuery.MultiTerm
and segment.IOException
protected void collectMultiTermStats(IndexSearcher searcher, Map<BytesRef,PhraseWildcardQuery.TermStats> termStatsMap, PhraseWildcardQuery.TermsData termsData, PhraseWildcardQuery.TermData termData) throws IOException
termStatsMap
- input map of already collected PhraseWildcardQuery.TermStats
.termsData
- receives the TermStatistics
computed for all PhraseWildcardQuery.TermStats
.termData
- receives all the collected Term
.IOException
protected void checkTermsHavePositions(Terms terms)
Copyright © 2000-2021 Apache Software Foundation. All Rights Reserved.