Package org.apache.lucene.search
Class FilteredQuery
- java.lang.Object
-
- org.apache.lucene.search.Query
-
- org.apache.lucene.search.FilteredQuery
-
- All Implemented Interfaces:
java.lang.Cloneable
public class FilteredQuery extends Query
A query that applies a filter to the results of another query.Note: the bits are retrieved from the filter each time this query is used in a search - use a CachingWrapperFilter to avoid regenerating the bits every time.
- Since:
- 1.4
- See Also:
CachingWrapperFilter
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
FilteredQuery.FilterStrategy
Abstract class that defines how the filter (DocIdSet
) applied during document collection.static class
FilteredQuery.RandomAccessFilterStrategy
AFilteredQuery.FilterStrategy
that conditionally uses a random access filter if the givenDocIdSet
supports random access (returns a non-null value fromDocIdSet.bits()
) andFilteredQuery.RandomAccessFilterStrategy.useRandomAccess(Bits, int)
returnstrue
.
-
Field Summary
Fields Modifier and Type Field Description static FilteredQuery.FilterStrategy
LEAP_FROG_FILTER_FIRST_STRATEGY
A filter strategy that uses a "leap-frog" approach (also called "zig-zag join").static FilteredQuery.FilterStrategy
LEAP_FROG_QUERY_FIRST_STRATEGY
A filter strategy that uses a "leap-frog" approach (also called "zig-zag join").static FilteredQuery.FilterStrategy
QUERY_FIRST_FILTER_STRATEGY
static FilteredQuery.FilterStrategy
RANDOM_ACCESS_FILTER_STRATEGY
AFilteredQuery.FilterStrategy
that conditionally uses a random access filter if the givenDocIdSet
supports random access (returns a non-null value fromDocIdSet.bits()
) andFilteredQuery.RandomAccessFilterStrategy.useRandomAccess(Bits, int)
returnstrue
.
-
Constructor Summary
Constructors Constructor Description FilteredQuery(Query query, Filter filter)
Constructs a new query which applies a filter to the results of the original query.FilteredQuery(Query query, Filter filter, FilteredQuery.FilterStrategy strategy)
Expert: Constructs a new query which applies a filter to the results of the original query.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description Weight
createWeight(IndexSearcher searcher)
Returns a Weight that applies the filter to the enclosed query's Weight.boolean
equals(java.lang.Object o)
Returns true iffo
is equal to this.void
extractTerms(java.util.Set<Term> terms)
Expert: adds all terms occurring in this query to the terms set.Filter
getFilter()
Returns this FilteredQuery's filterFilteredQuery.FilterStrategy
getFilterStrategy()
Returns this FilteredQuery'sFilteredQuery.FilterStrategy
Query
getQuery()
Returns this FilteredQuery's (unfiltered) Queryint
hashCode()
Returns a hash code value for this object.Query
rewrite(IndexReader reader)
Rewrites the query.java.lang.String
toString(java.lang.String s)
Prints a user-readable version of this query.
-
-
-
Field Detail
-
RANDOM_ACCESS_FILTER_STRATEGY
public static final FilteredQuery.FilterStrategy RANDOM_ACCESS_FILTER_STRATEGY
AFilteredQuery.FilterStrategy
that conditionally uses a random access filter if the givenDocIdSet
supports random access (returns a non-null value fromDocIdSet.bits()
) andFilteredQuery.RandomAccessFilterStrategy.useRandomAccess(Bits, int)
returnstrue
. Otherwise this strategy falls back to a "zig-zag join" (LEAP_FROG_FILTER_FIRST_STRATEGY
) strategy.Note: this strategy is the default strategy in
FilteredQuery
-
LEAP_FROG_FILTER_FIRST_STRATEGY
public static final FilteredQuery.FilterStrategy LEAP_FROG_FILTER_FIRST_STRATEGY
A filter strategy that uses a "leap-frog" approach (also called "zig-zag join"). The scorer and the filter take turns trying to advance to each other's next matching document, often jumping past the target document. When both land on the same document, it's collected.Note: This strategy uses the filter to lead the iteration.
-
LEAP_FROG_QUERY_FIRST_STRATEGY
public static final FilteredQuery.FilterStrategy LEAP_FROG_QUERY_FIRST_STRATEGY
A filter strategy that uses a "leap-frog" approach (also called "zig-zag join"). The scorer and the filter take turns trying to advance to each other's next matching document, often jumping past the target document. When both land on the same document, it's collected.Note: This strategy uses the query to lead the iteration.
-
QUERY_FIRST_FILTER_STRATEGY
public static final FilteredQuery.FilterStrategy QUERY_FIRST_FILTER_STRATEGY
A filter strategy that advances the Query or rather itsScorer
first and consults the filterDocIdSet
for each matched document.Note: this strategy requires a
DocIdSet.bits()
to return a non-null value. Otherwise this strategy falls back toLEAP_FROG_QUERY_FIRST_STRATEGY
Use this strategy if the filter computation is more expensive than document scoring or if the filter has a linear running time to compute the next matching doc like exact geo distances.
-
-
Constructor Detail
-
FilteredQuery
public FilteredQuery(Query query, Filter filter)
Constructs a new query which applies a filter to the results of the original query.Filter.getDocIdSet(org.apache.lucene.index.AtomicReaderContext, org.apache.lucene.util.Bits)
will be called every time this query is used in a search.- Parameters:
query
- Query to be filtered, cannot benull
.filter
- Filter to apply to query results, cannot benull
.
-
FilteredQuery
public FilteredQuery(Query query, Filter filter, FilteredQuery.FilterStrategy strategy)
Expert: Constructs a new query which applies a filter to the results of the original query.Filter.getDocIdSet(org.apache.lucene.index.AtomicReaderContext, org.apache.lucene.util.Bits)
will be called every time this query is used in a search.- Parameters:
query
- Query to be filtered, cannot benull
.filter
- Filter to apply to query results, cannot benull
.strategy
- a filter strategy used to create a filtered scorer.- See Also:
FilteredQuery.FilterStrategy
-
-
Method Detail
-
createWeight
public Weight createWeight(IndexSearcher searcher) throws java.io.IOException
Returns a Weight that applies the filter to the enclosed query's Weight. This is accomplished by overriding the Scorer returned by the Weight.- Overrides:
createWeight
in classQuery
- Throws:
java.io.IOException
-
rewrite
public Query rewrite(IndexReader reader) throws java.io.IOException
Rewrites the query. If the wrapped is an instance ofMatchAllDocsQuery
it returns aConstantScoreQuery
. Otherwise it returns a newFilteredQuery
wrapping the rewritten query.
-
getQuery
public final Query getQuery()
Returns this FilteredQuery's (unfiltered) Query
-
getFilter
public final Filter getFilter()
Returns this FilteredQuery's filter
-
getFilterStrategy
public FilteredQuery.FilterStrategy getFilterStrategy()
Returns this FilteredQuery'sFilteredQuery.FilterStrategy
-
extractTerms
public void extractTerms(java.util.Set<Term> terms)
Description copied from class:Query
Expert: adds all terms occurring in this query to the terms set. Only works if this query is in itsrewritten
form.- Overrides:
extractTerms
in classQuery
-
toString
public java.lang.String toString(java.lang.String s)
Prints a user-readable version of this query.
-
equals
public boolean equals(java.lang.Object o)
Returns true iffo
is equal to this.
-
-