【问题标题】:Do additional date range filters increase the performance?额外的日期范围过滤器是否会提高性能?
【发布时间】:2017-07-20 11:30:24
【问题描述】:

对于现有的大型 ElasticSearch 5 索引,我想添加一个 date 字段,其中包含每个文档的索引日期。之后我想查询这个索引,返回最后一分钟创建的所有文档。

在ElasticSearch Ultimative Guide for version 1 中提到,为日、月和/或年添加额外的过滤器可以显着提高性能。较新版本的指南不再这么说。

我能否通过添加额外的日期过滤器在 ElasticSearch 5 中获得性能?

【问题讨论】:

    标签: performance date elasticsearch filter


    【解决方案1】:

    根据索引的大小,它肯定有助于限制查询时考虑的数据量。

    如果您的索引包含多年的数据,则添加一个过滤器以仅考虑在最后一分钟索引的文档将大大减少您的查询所关注的数据量。

    ES 1.x 是这种情况,ES 5.x 仍然是这种情况,唯一的区别是在 1.x 中,您必须注意正确排序过滤器以首先使用最激进的过滤器,在 5.x 中不再是这种情况,因为 ES 现在足够聪明,可以首先运行最激进的过滤器,以确保在搜索过程中尽早清除不必要的数据。

    【讨论】:

    • 这个运气好吗?
    • 如果我按date > 2017-07-18 23:58:13 过滤,那么添加像date > 2017 这样的过滤器会提高性能(由于更好的缓存?)
    • 不确定两个日期之间的关系?
    • 一个日期将是我想要过滤的确切第二个日期(不太可能被缓存),另一个日期只是我正在搜索的年份部分(不准确,但很可能会被缓存)。
    • ES 过去以与文本相同的方式索引数字(和日期),但在最近的版本中,他们开始使用 BKD 树数据结构以不同的方式进行索引,这提供了更好的性能。你可以阅读它here、here 和here。所有这一切都表明您可以相信 ES,如果可以从您的查询中进行优化,它就会成功。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-09
    • 2015-10-10
    • 2021-12-17
    相关资源
    最近更新 更多