我已经在Apache Lucene中将QueryParser子类化,将输入字段名称(用户reuqest)更改为我的模型类中的相应字段名称。
public class QueryParserMoney extends QueryParser {
public QueryParserMoney(Version matchVersion, String f, Analyzer a) {
super(matchVersion, f, a);
}
@Override
protected Query newTermQuery(Term term) {
if (term.field() == "money") {
PaddedIntegerBridge pB = new PaddedIntegerBridge();
TermRangeQuery trq = new TermRangeQuery("moneyTo",
pB.objectToString(Integer.parseInt(term.text())), "*",
true, true);
return trq;
}
return super.newTermQuery(term);
}
输入查询与money:5000
类似,我将其更改为moneyTo:[5000 TO *]
生成的查询没问题,我正在用Luke检查查询,但在Java中我有0个结果。
你有什么建议我犯了错误吗?
答案 0 :(得分:0)
moneyTo
是数字字段吗?如果是这样,您应该使用NumericRangeQuery而不是TermRangeQuery。如果moneyTo
是字符串字段,则看起来不像TermRangeQuery将“*”识别为开放端点,您应该使用null
代替。