【问题标题】:Something "Materialized view"-like in ElasticSearch类似于 ElasticSearch 中的“物化视图”
【发布时间】:2017-01-03 10:10:31
【问题描述】:

我有一个每次加载网站时都会运行的查询。此查询聚合了三个不同的术语字段和大约 300 万个文档,因此需要 6-7 秒才能完成。数据不会那么频繁地更改,结果的当前性并不重要。

我知道我可以使用别名来创建类似于 RDMS 世界中的“视图”。是否也可以填充它,以便查询结果被缓存?在这种情况下,缓存是否有任何其他帮助,或者我是否必须为聚合数据创建一个额外的索引并不时更新它?

【问题讨论】:

  • 聚合 300 万个文档并不是很多。所以很高兴知道为什么运行您的查询需要 6-7 秒并可能首先对其进行优化。
  • 好的,我该怎么做?我启用了慢日志,但你没有给我太多信息。查询很简单,对三个字段执行aggs,如下所示:"aggFieldName": { "terms": { "field": "myField", "size": 0 } },
  • 首先您可以在查询中使用explain=true 以获得一些见解。然后你也可以使用Profile API 来分析你的聚合
  • 好的,我试试这个,看看能不能有所收获。

标签: elasticsearch elasticsearch-5


【解决方案1】:

我知道帖子很旧,但是关于视图,弹性在 7.3.0 中添加数据框。 你也可以使用 _reindex api

POST /_reindex
{
  "source": {
    "index": "live_index"
  },
  "dest": {
    "index": "caching_index"
  }
}

但这不会改变您的摄取问题。 关于这一点,我认为解决方案是为您的索引分片。 有 2 个或更多的分片和多个节点,弹性将能够瘫痪。

但更容易测试的是在索引时禁用 refresh_interval 并在之后重新启用它。它通常会大大缩短摄取时间。

您可以在以下位置查看有关此用例的完整文章 https://www.elastic.co/guide/en/elasticsearch/reference/current/tune-for-indexing-speed.html

【讨论】:

  • 感谢您迟到的答复。实际上我自己记不起大部分问题,所以我很难说,如果它解决了这个问题。我多么希望它能帮助别人
  • 我希望如此:)
  • 谢谢,它有帮助:) 这里有关于数据帧转换的详细信息elastic.co/guide/en/elasticsearch/reference/master/…
【解决方案2】:

您创建物化视图。它最终是一个包含聚合函数数据的表。由于您已经插入了聚合数据,现在当您查询它时,它会更快。我觉得也不需要缓存。即使我已经创建了 MV,它也极大地提高了性能。话虽如此,您甚至可以使用弹性搜索,如果您的数据不经常更改,您可以缓存聚合查询。我觉得 MV 和弹性搜索提供相同的性能。

【讨论】:

    猜你喜欢
    • 2021-05-04
    • 1970-01-01
    • 2021-08-26
    • 1970-01-01
    • 1970-01-01
    • 2021-03-05
    • 1970-01-01
    • 2020-04-08
    • 2019-10-07
    相关资源
    最近更新 更多