无法导入org.apache.lucene.search.NumericRangeQuery问题求助
Lucene 9.7.0 中 NumericRangeQuery 无法解析的解决方案
类是否仍存在?
NumericRangeQuery 在 Lucene 6.0 及以后的版本中已被移除,你使用的 9.7.0 版本自然没有这个类。它的功能被类型特定的范围查询类替代,这些类针对不同数值类型做了性能优化。
如何成功实现原功能?
替代方案是使用 org.apache.lucene.document 包下的类型专属范围查询方法,以下是对应场景的用法:
1. 整数类型范围查询(int/long)
- 针对 int 类型:使用
IntPoint.newRangeQuery() - 针对 long 类型:使用
LongPoint.newRangeQuery()
示例代码:
// 替代旧版 NumericRangeQuery.newIntRange("age", 18, 30, true, true) Query ageRangeQuery = IntPoint.newRangeQuery("age", 18, 30);
2. 浮点数类型范围查询(float/double)
- 针对 float 类型:使用
FloatPoint.newRangeQuery() - 针对 double 类型:使用
DoublePoint.newRangeQuery()
示例代码:
// 替代旧版 NumericRangeQuery.newDoubleRange("price", 100.0, 200.0, true, true) Query priceRangeQuery = DoublePoint.newRangeQuery("price", 100.0, 200.0);
注意事项
如果是从旧版本 Lucene 迁移代码,还需要同步修改字段索引方式:
- 原
NumericField需要替换为对应类型的 Point 字段,比如IntField、LongField、FloatField、DoubleField,这些字段默认会以 Point 类型索引数据,才能配合上述范围查询方法使用。
内容的提问来源于stack exchange,提问作者Anna
相关产品推荐
相关产品推荐

