[Xapian-discuss] query within value range
Mark Clarkson
mark.clarkson at smorg.co.uk
Tue Jun 5 16:23:56 BST 2007
On Tue, 2007-06-05 at 15:21 +0100, Richard Boulton wrote:
> 1) index your data storing the value you wish to sort by in a value (ie,
> not as a term). Sorting is only possible in string order, so if you
> want to store a number to sort by, this needs to be marshalled into a
> form in which numerical sort order is the same as string sort order: for
> integers in a known range (eg, dates), the easiest way to do this is to
> pad with leading zeros so that all the values are the same length.
>
> 2) assuming you're using the query parser, add a value-range processor
> to the parser using "add_valuerangeprocessor()". Supposing you're using
> a DateValueRangeProcessor, you'd might do something like:
>
> qp.add_valuerangeprocessor(Xapian::DateValueRangeProcessor(1))
>
> Then, a query like "20060501..20070503" will become a ValueRange query,
> returning only those documents for which the value in slot 1 is in the
> range 20060501 to 20070503.
>
> Note that value range processors don't use prefixes, so you don't need
> to specify "date:" in the query - the ".." is picked up as indicating a
> range.
>
> 3) If you're not using the query parser, you can build the value range
> query directly, using the OP_VALUE_RANGE operator (and an associated
> constructor).
>
Your excellent clear description is just what I needed. Thanks very
much. Would I be right in saying that there can be only one value range
item that can be used per query when using the query parser?
Cheers
Mark.
More information about the Xapian-discuss
mailing list