TypedRangeQuery is used to find documents with terms in a range. RangeQuerys are usually used on untokenized fields like date fields or number fields. TypedRangeQuery is particularly useful for fields with unnormalized numbers, both positive and negative, integer and float.
To find all documents written between January 1st 2006 and January 26th 2006 inclusive you would write the query like this;
query = RangeQuery.new(:create_date, :>= "-1.0", :<= "10.0")
TypedRangeQuery works by converting all the terms in a field to numbers and then comparing those numbers with the range bondaries. This can have quite an impact on performance on large indexes so in those cases it is usually better to use a standard RangeQuery. This will require a little work on your behalf. See RangeQuery for notes on how to do this.
Create a new TypedRangeQuery on field
field
. This differs from the standard RangeQuery in that it allows range queries with
unpadded numbers, both positive and negative, integer and float. You can
even use hexadecimal numbers. However it could be a lot slower than the
standard RangeQuery on large indexes.
There are two ways to build a range query. 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.
q = TypedRangeQuery.new(:date, :lower => "0.1", :include_lower => false) # is equivalent to q = TypedRangeQuery.new(:date, :< => "0.1") # is equivalent to q = TypedRangeQuery.new(:date, :lower_exclusive => "0.1") # Note that you numbers can be strings or actual numbers q = TypedRangeQuery.new(:date, :lower => "-12.32", :upper => 0.21) # is equivalent to q = TypedRangeQuery.new(:date, :>= => "-12.32", :<= => 0.21)
static VALUE frb_trq_init(VALUE self, VALUE rfield, VALUE roptions) { Query *q; char *lterm = NULL; char *uterm = NULL; bool include_lower = false; bool include_upper = false; get_range_params(roptions, <erm, &uterm, &include_lower, &include_upper); q = trq_new(frb_field(rfield), lterm, uterm, include_lower, include_upper); Frt_Wrap_Struct(self, NULL, &frb_q_free, q); object_add(q, self); return self; }