4

如何使用 TermQuery 精确匹配 LongField?

4

2 回答 2

6

考虑NumericUtils API上的警告

注意:此 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 回答