我正在使用索引约为120GB的5节点Elasticsearch集群。
我们遇到了具有多个过滤器的慢查询问题。对查询进行概要分析后,我发现IndexOrDocValuesQuery每个查询大约花费3.2秒。每个查询包含大约4或5个步骤,这将花费20秒。奇怪的是,我想想TermQuery要贵得多,它花费了64毫秒。
我们应该在哪里寻找更多信息,以了解可能导致这些查询速度下降的原因?
Elasticsearch V5.5,我认为有2.8亿个文档,但有4000万个主要文档(无嵌套)
节点规格: 4个CPU 26 GB内存 12 GB堆
5个数据节点,2个主节点,2个客户端。主机和客户端的规格要比节点低得多。
以下是查询:https://gist.github.com/wakawaka54/d4cad864d858efc41a0b2806ea0041b4 1
以下是查询配置文件结果:https://gist.github.com/wakawaka54/6b52fd0eef2b8ead1589241e65c239fe
这是索引映射: https://gist.github.com/wakawaka54/417602c8f73a613830904b20398b7bac
答案 0 :(得分:0)
首先要考虑术语查询和其他任何查询。字词查询最快,因为它们只需要按字词查找并获取所有匹配的文档ID。这是一个微不足道的操作,它利用术语词典,该信息的获取速度与键查找一样快。
当然,即使启用了DocValues(默认情况下),远程过滤器的速度也会慢得多。
我看不到您的numberSort
是嵌套类型的。我想不确定是否可以加快搜索速度,但是值得一试,因为您希望将其嵌套。
如何加快查询速度?