拥有数十亿的文件。文档的一个字段是时间戳(毫秒),在索引时使用以下映射。
timestamp:
type: "date"
format: "YYYY-MM-dd HH:mm:ss||YYYY-MM-dd HH:mm:ss.SSS"
ignore_malformed: true
doc_values: true
搜索时,请使用范围过滤器。由于使用了doc_value,因此范围过滤器在内部使用反向索引进行搜索。这有点慢。
The execution option controls how the range filter internally executes. The execution option accepts the following values: index: Uses the field’s inverted index in order to determine whether documents fall within the specified range.
如果我以其他方式更改映射,即使用day而不是hours / seconds / milliseconds。
day:
type: "date"
format: "YYYY-MM-dd"
ignore_malformed: true
doc_values: true
搜索时,使用范围过滤器,速度更快。
有人可以帮助解释为什么性能不同。
第一个(使用秒/毫秒),反转索引(在内部假设它是一种哈希表)具有大量的键。而第二个(仅使用天数),反转索引的键少得多。 是原因吗?
答案 0 :(得分:1)
你的假设是正确的。当未对日期的时间分量编制索引时,唯一值的数量较少。在进行范围查询时,Elasticsearch必须“循环”较少数量的帖子列表,从而观察到性能改进。