elasticsearch聚合性能优化

Terms Aggregation 的计算方式主要有以下两种:

map,在内存中构建映射表,利用映射表完成聚合计算,可以看得出,这种方式会比较消耗内存。

global_ordinals,每个桶都会有一个全局序列号,也就是指定域中的唯一值都会有一个全局序列号,根据这个序列号完成相关的聚合过程。计算过程消耗的内存较小,因为使用全局序列号的话可以将计算中的中间结果存储到硬盘等存储介质中。

es java api 做聚合时默认的是第二种,消耗内存少,但时间长,评估了一下内存,果断采用第一种,设置executionHint即可,如:

AggregationBuilder ipAggregation = AggregationBuilders.terms("xx").field("xx").executionHint("map");
修改了之后,查询性能提升了十几倍,达到目的,且没出现oom

猜你喜欢

转载自www.cnblogs.com/gouhaiping/p/12446950.html