Michael McCandless wrote:
On Fri, Oct 9, 2009 at 3:26 PM, Paul Taylor <paul_t...@fastmail.fm> wrote:
I currently use NumberTools.longToString() to add integer fields to
an index and allow range searching, then when searching I then
preprocess the query (using regular expressions) and convert integer
fields to NumberTools.longToString before it is parsed by the
QueryParser, then when I return the results I use
NumberTools.stringToLong(), so my implementation is flaky. Now I'm
using Lucene 2.9 I thought Id use NumericField and hoped I could
remove the preprocessing instead but I'm really not clear what I do
on the indexing and searching side. I've even just bought the MEAP
version of Lucene Action 2nd Edition and it doesn't even get a
mention (nor does NumberTools for that matter it just mentions
padding numbers with zeroes).
So please anyone got a simple example of how to add a numeric field
to an index, and what has to be done on the search side, assuming
receiving a text string that gets parsed by the QueryParser
The next LIA2 MEAP update, which should be out very soon, covers
NumericField and also shows how to extend QueryParser (by subclassing
and overriding newRangeQuery) to properly create a NumericRangeQuery,
like this:
static class NumericRangeQueryParser extends QueryParser {
public NumericRangeQueryParser(String field, Analyzer a) {
super(field, a);
}
public Query getRangeQuery(String field,
String part1,
String part2,
boolean inclusive)
throws ParseException {
TermRangeQuery query = (TermRangeQuery)
super.getRangeQuery(field, part1, part2,
inclusive);
if ("price".equals(field)) {
return NumericRangeQuery.newDoubleRange(
"price",
Double.parseDouble(
query.getLowerTerm()),
Double.parseDouble(
query.getUpperTerm()),
query.includesLower(),
query.includesUpper());
} else {
return query;
}
}
}
It still relies on super.getRangeQuery() for non-numeric fields. If
you don't have non-numeric fields that accept range queries you can
simply call NumericRangeQuery.newXXXRange directly.
Mike
Ok, thanks but what do i do on the indexing side I dont understand this
TriePart thing, and if the numeric field is not being used in a range
query do I have to worry about that ?
---------------------------------------------------------------------
To unsubscribe, e-mail: java-user-unsubscr...@lucene.apache.org
For additional commands, e-mail: java-user-h...@lucene.apache.org