Lucene LongField使用Query进行精确搜索

时间:2013-01-04 13:55:37

标签: lucene long-integer

如何使用TermQuery与LongField完全匹配?

2 个答案:

答案 0 :(得分:6)

考虑NumericUtils API

上的警告

注意:此API仅供内部使用,可能会在下一版本中以不兼容的方式更改。

我注意到这对某些人来说是一个问题,因为NumericUtils API确实从Version 3.6显着变化到Version 4.0。我建议不要直接使用它。

而是使用NumericRangeQuery搜索数值。通过将最大和最小范围设置为相等的值,可以获得精确匹配。

此外,故意选择哪些字段应为数字可能会有所帮助。 NumericFields旨在允许数字范围查询和排序。如果您不需要使用它作为数值进行搜索,则它可能不应该是NumericField。例如,识别号码通常应该是关键字,而不是数字。

答案 1 :(得分:1)

BytesRef ref = new BytesRef();    
NumericUtils.longToPrefixCoded( 12L, 0, ref );
Query q = new TermQuery( new Term( fieldname, ref ) );