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, toStringprotected 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 QueryIOExceptionpublic void visit(QueryVisitor visitor)
public Weight createWeight(IndexSearcher searcher, ScoreMode scoreMode, float boost) throws IOException
createWeight in class QueryIOExceptionprotected 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.IOExceptionprotected 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.IOExceptionprotected 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.IOExceptionprotected TermsEnum createTermsEnum(PhraseWildcardQuery.MultiTerm multiTerm, LeafReaderContext leafReaderContext) throws IOException
TermsEnum for the given PhraseWildcardQuery.MultiTerm and segment.IOExceptionprotected 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.IOExceptionprotected void checkTermsHavePositions(Terms terms)
Copyright © 2000-2021 Apache Software Foundation. All Rights Reserved.