我读到处理日期范围查询NumericRangeQuery比“Lucene in action”中的TermRangeQuery更好,但我无法找到原因。我想知道背后的原因。 我使用TermRangeQuery和NumericRangequery来处理日期范围查询,我发现通过NumericRangeQuery快速搜索。
我的第二点是使用NumericRangeQuery进行查询我必须使用NumericField创建索引,通过它我可以创建高达毫秒的索引但是如果我想将分辨率降低到一小时或一天,那该怎么办。
答案 0 :(得分:3)
正如您所指出的,有一个“精确步骤”。这意味着数字仅存储到一定的精度,这意味着存在(非常)有限数量的术语。根据文档,在索引中很少有超过300个术语。如果您对该理论感兴趣,请查看Tries上的维基百科文章。
NumericField类在构造函数中有一个“precision”参数。请注意,范围查询还具有精度参数,它们必须相同。该JavaDoc页面包含一篇关于实现的文章的链接,该文章解释了更多精确含义。
答案 1 :(得分:0)
@Xodarap关于数字字段的说明是正确的。实质上,数字的精度会降低,以减少实际的术语空间。另外,我想,TermRangeQuery使用String比较,而NumericRange查询使用整数。这应该会挤出更多的表现。
您可以以任何理想的分辨率进行索引 - 毫秒到天。 Date.getTime()
给出了自纪元以来的毫秒数。您可以将此数字除以1000以获得第二个分辨率的时间。或者你可以除以60,000来获得分辨率。等等。