问题背景
查找19年到现在数据很慢,terms聚合性能问题。订单量统计(2021-11-11⽇统计) 来⾃:X_N表。
项⽬ | 订单量 |
---|---|
X1 | 176386 |
X2 | 774911 |
X3 | 1183295 |
X4 | 1567748 |
X5 | 3567914 |
当订单量达到500w-1000w以上,terms聚合性能很差。
解决方法
性能优化是把es的terms-aggregation改成composite aggregation。terms嵌套聚合改成composite聚合的缺点:相对嵌套式terms,缺乏的功能是⽆法执⾏中间层上的⼦聚合,需要再对中间层进⾏额外的聚合请求。所以会极⼤增加代码的编写。
terms聚合:参考
terms聚合不精确问题(5.3有说明):参考
composite聚合:参考
multi-terms聚合(7.15才有特性):参考
案例分析
1 | Map<Integer, Map<String, Cat1Agg>> aggs(String index, Param param) { |
terms聚合
1 | GET order/_search?size=0{ |
优化成composite聚合
多轮composite聚合,每次composite聚合需要遍历所有分⽚ ,并且遍历多次。
1 | GETorder/_search?size=0{ |