Lucene LongField的精确搜索与查询

4
如何使用TermQuery精确匹配LongField?
2个回答

6
考虑到NumericUtils API的警告: 注意:此API仅供内部使用,可能会在下一个版本中以不兼容的方式进行更改。 我已经注意到这成为某些人的问题,因为从3.6版本4.0版本,NumericUtils API确实发生了重大变化。 我建议避免直接使用它。
相反,使用NumericRangeQuery搜索数值。通过将最小和最大范围设置为相等的值,可以获得精确匹配。
此外,有意选择哪些字段应该是数字可能会有所帮助。 NumericFields旨在允许数字范围查询和排序。 如果您不需要使用它作为数字值进行搜索,则可能不应该是NumericField。 例如,标识号通常应是关键字而不是数字。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接