Bạn cũng có thể tạo ra một QueryParser tùy chỉnh trọng protected Query getRangeQuery(...)
phương pháp, mà nên trở NumericRangeQuery
dụ khi "page_count"
lĩnh vực đang gặp phải.
Giống như rất ...
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);
}
}
Sau đó sử dụng CustomQueryParser
khi phân tích cú pháp truy vấn văn bản ..
Giống như rất ...
...
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]");
...
này tất cả, tất nhiên, giả sử rằng NumericField(...).setIntValue(...)
được sử dụng khi page_count
giá trị được thêm vào tài liệu
Nguồn
2012-01-25 03:14:55
Bạn có biết làm thế nào để thực hiện nó trên Lucene4? Có vẻ như, Query.combine() không hoạt động trong Lucene4 – Dewsworld
Hey @Dewsworld, giải pháp là sử dụng Truy vấn Boolean: Truy vấn BooleanQuery = new BooleanQuery(); truy vấn.Thêm (new TermQuery (...), BooleanClause.Occur.MUST); truy vấn.Thêm (new Term.Query (...), BooleanClause.Occur.KHÔNG BAO GIỜ); –