Class PhraseWildcardQuery
- java.lang.Object
-
- org.apache.lucene.search.Query
-
- org.apache.lucene.sandbox.search.PhraseWildcardQuery
-
public class PhraseWildcardQuery extends Query
A generalized version ofPhraseQuery, built with one or moreMultiTermQuerythat 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
MultiTermQueryand across all segments.Use the
PhraseWildcardQuery.Builderto build aPhraseWildcardQuery.This query is similar to
MultiPhraseQuery, but it handles, controls and optimizes the multi-term expansions.This query is equivalent to building an ordered
SpanNearQuerywith a list ofSpanTermQueryandSpanMultiTermQueryWrapper. 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.
- WARNING: This API is experimental and might change in incompatible ways in the next release.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classPhraseWildcardQuery.BuilderBuilds aPhraseWildcardQuery.protected static classPhraseWildcardQuery.MultiTermPhrase term with expansions.protected static classPhraseWildcardQuery.PhraseTermAllPhraseWildcardQuery.PhraseTermare light and immutable.protected classPhraseWildcardQuery.SegmentTermsSizeComparatorCompares segments based of the number of terms they contain.protected static classPhraseWildcardQuery.SingleTermPhrase term with no expansion.static classPhraseWildcardQuery.TermBytesTermStateHolds a pair of term bytes - term state.protected static classPhraseWildcardQuery.TermDataprotected static classPhraseWildcardQuery.TermsDataHolds theTermStateandTermStatisticsfor all the matched and collectedTerm, for all phrase terms, for all segments.static classPhraseWildcardQuery.TermStatsAccumulates the doc freq and total term freq.protected static classPhraseWildcardQuery.TestCountersTest counters incremented when assertions are enabled.
-
Field Summary
Fields Modifier and Type Field Description protected Stringfieldprotected intmaxMultiTermExpansionsprotected static QueryNO_MATCH_QUERYprotected List<PhraseWildcardQuery.PhraseTerm>phraseTermsprotected booleansegmentOptimizationEnabledprotected intslop
-
Constructor Summary
Constructors Modifier Constructor Description protectedPhraseWildcardQuery(String field, List<PhraseWildcardQuery.PhraseTerm> phraseTerms, int slop, int maxMultiTermExpansions, boolean segmentOptimizationEnabled)
-
Method Summary
-
Methods inherited from class org.apache.lucene.search.Query
classHash, rewrite, sameClassAs, toString
-
-
-
-
Field Detail
-
NO_MATCH_QUERY
protected static final Query NO_MATCH_QUERY
-
field
protected final String field
-
phraseTerms
protected final List<PhraseWildcardQuery.PhraseTerm> phraseTerms
-
slop
protected final int slop
-
maxMultiTermExpansions
protected final int maxMultiTermExpansions
-
segmentOptimizationEnabled
protected final boolean segmentOptimizationEnabled
-
-
Constructor Detail
-
PhraseWildcardQuery
protected PhraseWildcardQuery(String field, List<PhraseWildcardQuery.PhraseTerm> phraseTerms, int slop, int maxMultiTermExpansions, boolean segmentOptimizationEnabled)
-
-
Method Detail
-
getField
public String getField()
-
rewrite
public Query rewrite(IndexSearcher indexSearcher) throws IOException
- Overrides:
rewritein classQuery- Throws:
IOException
-
visit
public void visit(QueryVisitor visitor)
-
createWeight
public Weight createWeight(IndexSearcher searcher, ScoreMode scoreMode, float boost) throws IOException
- Overrides:
createWeightin classQuery- Throws:
IOException
-
createTermsData
protected PhraseWildcardQuery.TermsData createTermsData(int numSegments)
Creates newPhraseWildcardQuery.TermsData.
-
earlyStopWeight
protected Weight earlyStopWeight()
-
noMatchWeight
protected Weight noMatchWeight()
-
collectSingleTermData
protected int collectSingleTermData(PhraseWildcardQuery.SingleTerm singleTerm, IndexSearcher searcher, List<LeafReaderContext> segments, PhraseWildcardQuery.TermsData termsData) throws IOException
Collects theTermStateandTermStatisticsfor a single-term without expansion.- Parameters:
termsData- receives the collected data.- Throws:
IOException
-
collectMultiTermData
protected int collectMultiTermData(PhraseWildcardQuery.MultiTerm multiTerm, IndexSearcher searcher, List<LeafReaderContext> segments, int remainingMultiTerms, int maxExpansionsForTerm, PhraseWildcardQuery.TermsData termsData) throws IOException
Collects theTermStateandTermStatisticsfor a multi-term with expansion.- Parameters:
remainingMultiTerms- the number of remaining multi-terms to process, including the current one, excluding the multi-terms already processed.termsData- receives the collected data.- Throws:
IOException
-
shouldOptimizeSegments
protected boolean shouldOptimizeSegments()
-
createTermStatsMap
protected Map<BytesRef,PhraseWildcardQuery.TermStats> createTermStatsMap(PhraseWildcardQuery.MultiTerm multiTerm)
Creates aPhraseWildcardQuery.TermStatsmap for aPhraseWildcardQuery.MultiTerm.
-
collectMultiTermDataForSegment
protected List<PhraseWildcardQuery.TermBytesTermState> collectMultiTermDataForSegment(PhraseWildcardQuery.MultiTerm multiTerm, LeafReaderContext leafReaderContext, int remainingExpansions, MutableValueBool shouldStopSegmentIteration, Map<BytesRef,PhraseWildcardQuery.TermStats> termStatsMap) throws IOException
Collects theTermStatelist andTermStatisticsfor a multi-term on a specific index segment.- Parameters:
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 collectedPhraseWildcardQuery.TermStatsacross all segments.- Throws:
IOException
-
createTermsEnum
protected TermsEnum createTermsEnum(PhraseWildcardQuery.MultiTerm multiTerm, LeafReaderContext leafReaderContext) throws IOException
Creates theTermsEnumfor the givenPhraseWildcardQuery.MultiTermand segment.- Returns:
- null if there is no term for this query field in the segment.
- Throws:
IOException
-
collectMultiTermStats
protected void collectMultiTermStats(IndexSearcher searcher, Map<BytesRef,PhraseWildcardQuery.TermStats> termStatsMap, PhraseWildcardQuery.TermsData termsData, PhraseWildcardQuery.TermData termData) throws IOException
Collect the term stats across all segments.- Parameters:
termStatsMap- input map of already collectedPhraseWildcardQuery.TermStats.termsData- receives theTermStatisticscomputed for allPhraseWildcardQuery.TermStats.termData- receives all the collectedTerm.- Throws:
IOException
-
checkTermsHavePositions
protected void checkTermsHavePositions(Terms terms)
-
-