org.apache.lucene.search
Class FieldCacheRangeFilter

java.lang.Object
  extended by org.apache.lucene.search.Filter
      extended by org.apache.lucene.search.FieldCacheRangeFilter
All Implemented Interfaces:
Serializable

public abstract class FieldCacheRangeFilter
extends Filter

A range filter built on top of a cached single term field (in FieldCache).

FieldCacheRangeFilter builds a single cache for the field the first time it is used. Each subsequent FieldCacheRangeFilter on the same field then reuses this cache, even if the range itself changes.

This means that FieldCacheRangeFilter is much faster (sometimes more than 100x as fast) as building a TermRangeFilter (or ConstantScoreRangeQuery on a TermRangeFilter) for each query, if using a newStringRange(java.lang.String, java.lang.String, java.lang.String, boolean, boolean). However, if the range never changes it is slower (around 2x as slow) than building a CachingWrapperFilter on top of a single TermRangeFilter. For numeric data types, this filter may be significantly faster than NumericRangeFilter. Furthermore, it does not need the numeric values encoded by NumericField. But it has the problem that it only works with exact one value/document (see below).

As with all FieldCache based functionality, FieldCacheRangeFilter is only valid for fields which exact one term for each document (except for newStringRange(java.lang.String, java.lang.String, java.lang.String, boolean, boolean) where 0 terms are also allowed). Due to a restriction of FieldCache, for numeric ranges all terms that do not have a numeric value, 0 is assumed.

Thus it works on dates, prices and other single value fields but will not work on regular text fields. It is preferable to use a NOT_ANALYZED field to ensure that there is only a single term.

This class does not have an constructor, use one of the static factory methods available, that create a correct instance for different data types supported by FieldCache.

See Also:
Serialized Form

Method Summary
 boolean equals(Object o)
           
abstract  DocIdSet getDocIdSet(IndexReader reader)
          This method is implemented for each data type
 int hashCode()
           
static FieldCacheRangeFilter newByteRange(String field, Byte lowerVal, Byte upperVal, boolean includeLower, boolean includeUpper)
          Creates a numeric range query using FieldCache.getBytes(IndexReader,String).
static FieldCacheRangeFilter newByteRange(String field, FieldCache.ByteParser parser, Byte lowerVal, Byte upperVal, boolean includeLower, boolean includeUpper)
          Creates a numeric range query using FieldCache.getBytes(IndexReader,String,FieldCache.ByteParser).
static FieldCacheRangeFilter newDoubleRange(String field, Double lowerVal, Double upperVal, boolean includeLower, boolean includeUpper)
          Creates a numeric range query using FieldCache.getDoubles(IndexReader,String).
static FieldCacheRangeFilter newDoubleRange(String field, FieldCache.DoubleParser parser, Double lowerVal, Double upperVal, boolean includeLower, boolean includeUpper)
          Creates a numeric range query using FieldCache.getDoubles(IndexReader,String,FieldCache.DoubleParser).
static FieldCacheRangeFilter newFloatRange(String field, FieldCache.FloatParser parser, Float lowerVal, Float upperVal, boolean includeLower, boolean includeUpper)
          Creates a numeric range query using FieldCache.getFloats(IndexReader,String,FieldCache.FloatParser).
static FieldCacheRangeFilter newFloatRange(String field, Float lowerVal, Float upperVal, boolean includeLower, boolean includeUpper)
          Creates a numeric range query using FieldCache.getFloats(IndexReader,String).
static FieldCacheRangeFilter newIntRange(String field, FieldCache.IntParser parser, Integer lowerVal, Integer upperVal, boolean includeLower, boolean includeUpper)
          Creates a numeric range query using FieldCache.getInts(IndexReader,String,FieldCache.IntParser).
static FieldCacheRangeFilter newIntRange(String field, Integer lowerVal, Integer upperVal, boolean includeLower, boolean includeUpper)
          Creates a numeric range query using FieldCache.getInts(IndexReader,String).
static FieldCacheRangeFilter newLongRange(String field, FieldCache.LongParser parser, Long lowerVal, Long upperVal, boolean includeLower, boolean includeUpper)
          Creates a numeric range query using FieldCache.getLongs(IndexReader,String,FieldCache.LongParser).
static FieldCacheRangeFilter newLongRange(String field, Long lowerVal, Long upperVal, boolean includeLower, boolean includeUpper)
          Creates a numeric range query using FieldCache.getLongs(IndexReader,String).
static FieldCacheRangeFilter newShortRange(String field, FieldCache.ShortParser parser, Short lowerVal, Short upperVal, boolean includeLower, boolean includeUpper)
          Creates a numeric range query using FieldCache.getShorts(IndexReader,String,FieldCache.ShortParser).
static FieldCacheRangeFilter newShortRange(String field, Short lowerVal, Short upperVal, boolean includeLower, boolean includeUpper)
          Creates a numeric range query using FieldCache.getShorts(IndexReader,String).
static FieldCacheRangeFilter newStringRange(String field, String lowerVal, String upperVal, boolean includeLower, boolean includeUpper)
          Creates a string range query using FieldCache.getStringIndex(org.apache.lucene.index.IndexReader, java.lang.String).
 String toString()
           
 
Methods inherited from class org.apache.lucene.search.Filter
bits
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 

Method Detail

getDocIdSet

public abstract DocIdSet getDocIdSet(IndexReader reader)
                              throws IOException
This method is implemented for each data type

Overrides:
getDocIdSet in class Filter
Parameters:
reader - a IndexReader instance opened on the index currently searched on. Note, it is likely that the provided reader does not represent the whole underlying index i.e. if the index has more than one segment the given reader only represents a single segment.
Returns:
a DocIdSet that provides the documents which should be permitted or prohibited in search results. NOTE: null can be returned if no documents will be accepted by this Filter.
Throws:
IOException
See Also:
DocIdBitSet

newStringRange

public static FieldCacheRangeFilter newStringRange(String field,
                                                   String lowerVal,
                                                   String upperVal,
                                                   boolean includeLower,
                                                   boolean includeUpper)
Creates a string range query using FieldCache.getStringIndex(org.apache.lucene.index.IndexReader, java.lang.String). This works with all fields containing zero or one term in the field. The range can be half-open by setting one of the values to null.


newByteRange

public static FieldCacheRangeFilter newByteRange(String field,
                                                 Byte lowerVal,
                                                 Byte upperVal,
                                                 boolean includeLower,
                                                 boolean includeUpper)
Creates a numeric range query using FieldCache.getBytes(IndexReader,String). This works with all byte fields containing exactly one numeric term in the field. The range can be half-open by setting one of the values to null.


newByteRange

public static FieldCacheRangeFilter newByteRange(String field,
                                                 FieldCache.ByteParser parser,
                                                 Byte lowerVal,
                                                 Byte upperVal,
                                                 boolean includeLower,
                                                 boolean includeUpper)
Creates a numeric range query using FieldCache.getBytes(IndexReader,String,FieldCache.ByteParser). This works with all byte fields containing exactly one numeric term in the field. The range can be half-open by setting one of the values to null.


newShortRange

public static FieldCacheRangeFilter newShortRange(String field,
                                                  Short lowerVal,
                                                  Short upperVal,
                                                  boolean includeLower,
                                                  boolean includeUpper)
Creates a numeric range query using FieldCache.getShorts(IndexReader,String). This works with all short fields containing exactly one numeric term in the field. The range can be half-open by setting one of the values to null.


newShortRange

public static FieldCacheRangeFilter newShortRange(String field,
                                                  FieldCache.ShortParser parser,
                                                  Short lowerVal,
                                                  Short upperVal,
                                                  boolean includeLower,
                                                  boolean includeUpper)
Creates a numeric range query using FieldCache.getShorts(IndexReader,String,FieldCache.ShortParser). This works with all short fields containing exactly one numeric term in the field. The range can be half-open by setting one of the values to null.


newIntRange

public static FieldCacheRangeFilter newIntRange(String field,
                                                Integer lowerVal,
                                                Integer upperVal,
                                                boolean includeLower,
                                                boolean includeUpper)
Creates a numeric range query using FieldCache.getInts(IndexReader,String). This works with all int fields containing exactly one numeric term in the field. The range can be half-open by setting one of the values to null.


newIntRange

public static FieldCacheRangeFilter newIntRange(String field,
                                                FieldCache.IntParser parser,
                                                Integer lowerVal,
                                                Integer upperVal,
                                                boolean includeLower,
                                                boolean includeUpper)
Creates a numeric range query using FieldCache.getInts(IndexReader,String,FieldCache.IntParser). This works with all int fields containing exactly one numeric term in the field. The range can be half-open by setting one of the values to null.


newLongRange

public static FieldCacheRangeFilter newLongRange(String field,
                                                 Long lowerVal,
                                                 Long upperVal,
                                                 boolean includeLower,
                                                 boolean includeUpper)
Creates a numeric range query using FieldCache.getLongs(IndexReader,String). This works with all long fields containing exactly one numeric term in the field. The range can be half-open by setting one of the values to null.


newLongRange

public static FieldCacheRangeFilter newLongRange(String field,
                                                 FieldCache.LongParser parser,
                                                 Long lowerVal,
                                                 Long upperVal,
                                                 boolean includeLower,
                                                 boolean includeUpper)
Creates a numeric range query using FieldCache.getLongs(IndexReader,String,FieldCache.LongParser). This works with all long fields containing exactly one numeric term in the field. The range can be half-open by setting one of the values to null.


newFloatRange

public static FieldCacheRangeFilter newFloatRange(String field,
                                                  Float lowerVal,
                                                  Float upperVal,
                                                  boolean includeLower,
                                                  boolean includeUpper)
Creates a numeric range query using FieldCache.getFloats(IndexReader,String). This works with all float fields containing exactly one numeric term in the field. The range can be half-open by setting one of the values to null.


newFloatRange

public static FieldCacheRangeFilter newFloatRange(String field,
                                                  FieldCache.FloatParser parser,
                                                  Float lowerVal,
                                                  Float upperVal,
                                                  boolean includeLower,
                                                  boolean includeUpper)
Creates a numeric range query using FieldCache.getFloats(IndexReader,String,FieldCache.FloatParser). This works with all float fields containing exactly one numeric term in the field. The range can be half-open by setting one of the values to null.


newDoubleRange

public static FieldCacheRangeFilter newDoubleRange(String field,
                                                   Double lowerVal,
                                                   Double upperVal,
                                                   boolean includeLower,
                                                   boolean includeUpper)
Creates a numeric range query using FieldCache.getDoubles(IndexReader,String). This works with all double fields containing exactly one numeric term in the field. The range can be half-open by setting one of the values to null.


newDoubleRange

public static FieldCacheRangeFilter newDoubleRange(String field,
                                                   FieldCache.DoubleParser parser,
                                                   Double lowerVal,
                                                   Double upperVal,
                                                   boolean includeLower,
                                                   boolean includeUpper)
Creates a numeric range query using FieldCache.getDoubles(IndexReader,String,FieldCache.DoubleParser). This works with all double fields containing exactly one numeric term in the field. The range can be half-open by setting one of the values to null.


toString

public final String toString()
Overrides:
toString in class Object

equals

public final boolean equals(Object o)
Overrides:
equals in class Object

hashCode

public final int hashCode()
Overrides:
hashCode in class Object


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