更新时间:2024-11-29 GMT+08:00
聚合优化
大多时候对单个字段的聚合查询还是比较快的,但是当需要聚合多个字段时,就会产生大量的分组,最终结果就是占用Elasticsearch大量的内存,从而导致内存溢出的情况发生。尽量根据业务优化,减少聚合次数。
默认深度优化聚合改为广度优先聚合
添加设置:"collect_mode": "breadth_first"。
depth_first:直接进行子聚合的计算。
breadth_first:先计算出当前聚合的结果,针对这个结果在对子聚合进行计算。
优化聚合执行方式
在每一层terms aggregation内部加一个 “execution_hint”: “map”。
添加设置:"execution_hint": "map"。
- 查询结果直接放入到内存中构建map,在查询结果集小的场景下,速度极快;
- 但如果查询结果集合很大(百万-亿级别)的时候,传统聚合方式会比map方式快。
安全模式下聚合查询示例:
curl -XGET --tlsv1.2 --negotiate -k -u : "https://ip:httpport/myindex-001/_search?pretty" -H 'Content-Type: application/json' -d' { "size" : 0, "aggregations": { "count_age" : { "terms" : { "field" : "age" } } } }'
安全模式下聚合优化后查询示例:
curl -XGET --tlsv1.2 --negotiate -k -u : "https://ip:httpport/myindex-001/_search?pretty" -H 'Content-Type: application/json' -d' { "size" : 0, "aggregations": { "count_age" : { "terms" : { "field" : "age", "execution_hint": "map", "collect_mode": "breadth_first" } } } }'
父主题: 数据查询调优