class Ferret::Search::RangeFilter

Summary

RangeFilter filters a set of documents which contain a lexicographical range of terms (ie “aaa”, “aab”, “aac”, etc). See also RangeQuery

Example

Find all documents created before 5th of September 2002.

filter = RangeFilter.new(:created_on, :< => "20020905")

Number fields

See RangeQuery for notes on how to use the RangeFilter on a field containing numbers.

Public Class Methods

new(field, options = {}) → range_query click to toggle source

Create a new RangeFilter on field field. There are two ways to build a range filter. With the old-style options; :lower, :upper, :include_lower and :include_upper or the new style options; +:<+, +:<=+, +:>+ and +:>=+. The options' names should speak for themselves. In the old-style options, limits are inclusive by default.

Examples

f = RangeFilter.new(:date, :lower => "200501", :include_lower => false)
# is equivalent to 
f = RangeFilter.new(:date, :< => "200501")
# is equivalent to 
f = RangeFilter.new(:date, :lower_exclusive => "200501")

f = RangeFilter.new(:date, :lower => "200501", :upper => 200502)
# is equivalent to 
f = RangeFilter.new(:date, :>= => "200501", :<= => 200502)
static VALUE
frb_rf_init(VALUE self, VALUE rfield, VALUE roptions)
{
    Filter *f;
    char *lterm = NULL;
    char *uterm = NULL;
    bool include_lower = false;
    bool include_upper = false;
    
    get_range_params(roptions, &lterm, &uterm, &include_lower, &include_upper);
    f = rfilt_new(frb_field(rfield), lterm, uterm,
                  include_lower, include_upper);
    Frt_Wrap_Struct(self, NULL, &frb_f_free, f);
    object_add(f, self);
    return self;
}