org.apache.lucene.search
Class FilteredQuery

java.lang.Object
  extended by org.apache.lucene.search.Query
      extended by org.apache.lucene.search.FilteredQuery
All Implemented Interfaces:
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
static class FilteredQuery.FilterStrategy
          Abstract class that defines how the filter (DocIdSet) applied during document collection.
static class FilteredQuery.RandomAccessFilterStrategy
          A FilteredQuery.FilterStrategy that conditionally uses a random access filter if the given DocIdSet supports random access (returns a non-null value from DocIdSet.bits()) and FilteredQuery.RandomAccessFilterStrategy.useRandomAccess(Bits, int) returns true.
 
Field Summary
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
          A filter strategy that advances the Query or rather its Scorer first and consults the filter DocIdSet for each matched document.
static FilteredQuery.FilterStrategy RANDOM_ACCESS_FILTER_STRATEGY
          A FilteredQuery.FilterStrategy that conditionally uses a random access filter if the given DocIdSet supports random access (returns a non-null value from DocIdSet.bits()) and FilteredQuery.RandomAccessFilterStrategy.useRandomAccess(Bits, int) returns true.
 
Constructor Summary
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
 Weight createWeight(IndexSearcher searcher)
          Returns a Weight that applies the filter to the enclosed query's Weight.
 boolean equals(Object o)
          Returns true iff o is equal to this.
 void extractTerms(Set<Term> terms)
          Expert: adds all terms occurring in this query to the terms set.
 Filter getFilter()
          Returns this FilteredQuery's filter
 FilteredQuery.FilterStrategy getFilterStrategy()
          Returns this FilteredQuery's FilteredQuery.FilterStrategy
 Query getQuery()
          Returns this FilteredQuery's (unfiltered) Query
 int hashCode()
          Returns a hash code value for this object.
 Query rewrite(IndexReader reader)
          Rewrites the query.
 String toString(String s)
          Prints a user-readable version of this query.
 
Methods inherited from class org.apache.lucene.search.Query
clone, getBoost, setBoost, toString
 
Methods inherited from class java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait
 

Field Detail

RANDOM_ACCESS_FILTER_STRATEGY

public static final FilteredQuery.FilterStrategy RANDOM_ACCESS_FILTER_STRATEGY
A FilteredQuery.FilterStrategy that conditionally uses a random access filter if the given DocIdSet supports random access (returns a non-null value from DocIdSet.bits()) and FilteredQuery.RandomAccessFilterStrategy.useRandomAccess(Bits, int) returns true. 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 its Scorer first and consults the filter DocIdSet for each matched document.

Note: this strategy requires a DocIdSet.bits() to return a non-null value. Otherwise this strategy falls back to LEAP_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 be null.
filter - Filter to apply to query results, cannot be null.

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 be null.
filter - Filter to apply to query results, cannot be null.
strategy - a filter strategy used to create a filtered scorer.
See Also:
FilteredQuery.FilterStrategy
Method Detail

createWeight

public Weight createWeight(IndexSearcher searcher)
                    throws 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 class Query
Throws:
IOException

rewrite

public Query rewrite(IndexReader reader)
              throws IOException
Rewrites the query. If the wrapped is an instance of MatchAllDocsQuery it returns a ConstantScoreQuery. Otherwise it returns a new FilteredQuery wrapping the rewritten query.

Overrides:
rewrite in class Query
Throws:
IOException

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's FilteredQuery.FilterStrategy


extractTerms

public void extractTerms(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 its rewritten form.

Overrides:
extractTerms in class Query

toString

public String toString(String s)
Prints a user-readable version of this query.

Specified by:
toString in class Query

equals

public boolean equals(Object o)
Returns true iff o is equal to this.

Overrides:
equals in class Query

hashCode

public int hashCode()
Returns a hash code value for this object.

Overrides:
hashCode in class Query


Copyright © 2000-2013 Apache Software Foundation. All Rights Reserved.