如何使用TermQuery与LongField完全匹配?
答案 0 :(得分:6)
注意:此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 ) );