如何使用 TermQuery 精确匹配 LongField?
问问题
4239 次
2 回答
6
注意:此 API 仅供内部使用,可能会在下一个版本中以不兼容的方式进行更改。
我注意到这对某些人来说是个问题,因为 NumericUtils API 确实从版本 3.6到版本 4.0发生了显着变化。我建议避免直接使用它。
相反,使用NumericRangeQuery来搜索数值。通过将最大和最小范围设置为相等的值,可以获得精确匹配。
此外,有意选择哪些字段应该是数字的可能会有所帮助。NumericFields 旨在允许数字范围查询和排序。如果您不需要将其用作数值进行搜索,则它可能不应该是 NumericField。例如,识别号通常应该是关键字,而不是数字。
于 2013-01-04T17:38:35.553 回答
1
BytesRef ref = new BytesRef();
NumericUtils.longToPrefixCoded( 12L, 0, ref );
Query q = new TermQuery( new Term( fieldname, ref ) );
于 2013-01-04T13:56:24.550 回答