You can also create a custom QueryParser overriding protected Query getRangeQuery(...) method, which should return NumericRangeQuery instance when "page_count" field is encountered.
Like so...
public class CustomQueryParser extends QueryParser { public CustomQueryParser(Version matchVersion, String f, Analyzer a) { super(matchVersion, f, a); } @Override protected Query getRangeQuery(final String field, final String part1, final String part2, final boolean inclusive) throws ParseException { if ("page_count".equals(field)) { return NumericRangeQuery.newIntRange(field, Integer.parseInt(part1), Integer.parseInt(part2), inclusive, inclusive); } // return default return super.getRangeQuery(field, part1, part2, inclusive); } }
Then use CustomQueryParser when parsing textual queries..
Like so...
... final QueryParser parser = new CustomQueryParser(Version.LUCENE_35, "some_default_field", new StandardAnalyzer(Version.LUCENE_35)); final Query q = parser.parse("title:\"hello world\" AND page_count:[10 TO 20]"); ...
This all, of course, assumes that NumericField(...).setIntValue(...) was used when page_count values were added to documents