是时候用 ES 拯救发际线啦

Elasticsearch 聚合查询性能问题

Elasticsearch | 作者 cxy | 发布于2019年12月06日 | 阅读数:3983

我们有个需求,需要根据不同字段进行聚合,显示出每个分类的数量,数据预计大约一个亿,目前不到3000w,分别对不同字段进行terms聚合后,一次查询大约需要3秒,请问有什么优化的方法吗?已经设置了聚合的size和execution_hint,机器128G内存 24核cpu,目前单机es实例,31G jvm内存
已邀请:

God_lockin

赞同来自:

可以预聚合吗?可不可以把你要聚合的字段先存内存?
"settings" : {
"index" : {
"store" : {
"preload" : [
"entity"
]
}
}
},

cxy

赞同来自:

使用了广度优先,提升不大,使用profile api查看,发现耗时主要在在term聚合中,尤其是某个字段的term聚合(keyword类型)

laoyang360 - Elastic认证工程师 [死磕Elasitcsearch]知识星球地址:http://t.cn/RmwM3N9;微信公众号:铭毅天下; 博客:https://elastic.blog.csdn.net

赞同来自:

1,你需要去和返回不同分组的统计结果吗?需要返回多少个分组?
2,3000万数据是基础数据,是不是要还有增量数据需要对增量数据进行聚合?
如果是的话,那你这种就属于实时聚合。
能想到的点:
第一:建议keyword字段,
第二:提前数据的预处理,考虑写入前的归类,如果某类数据有共同特征,建议打上tag,到时候聚合tag
第三:考虑多节点集群,单节点性能有上限

要回复问题请先登录注册