Elasticsearch范围过滤倒排索引



拥有百亿文档。文档的一个字段是时间戳(毫秒),在索引时使用以下映射。

  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:
    type: "date"
    format: "YYYY-MM-dd"
    ignore_malformed: true
    doc_values: true

搜索时,使用范围过滤器,速度更快。

谁能解释一下为什么性能不同?

第一个(使用秒/毫秒),反向索引(假设它内部是一种哈希表)有大量的键。而第二个索引(只使用天数),反向索引的键要少得多。这是原因吗?

你的假设是正确的。当日期的时间组件没有索引时,唯一值的数量较少。当执行范围查询时,Elasticsearch必须在较少数量的帖子列表上"循环",因此可以观察到性能改进。

相关内容

  • 没有找到相关文章

最新更新