7

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

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

4

2 回答 2

2

我知道帖子很旧,但关于视图,弹性添加数据帧在 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上查看有关此用例的完整文章

于 2019-12-04T07:40:10.717 回答
-3

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

于 2017-08-14T08:27:15.467 回答