三人行必有我师

搜索结果数量较大,并且需要对所有结果进行聚合。可以使用scroll吗?

Elasticsearch | 作者 liangkuai | 发布于2016年10月06日 | 阅读数:8031

不可以的话应该怎样对返回的大量数据进行聚合?
已邀请:

kennywu76 - Wood

赞同来自: linxiuyuan

搜索的结果集大并不是什么问题,无需全部读取出来一条一条自己算! aggregations可以对海量结果集做分布式聚合计算。 比如对查询结果的某个字段做sum计算,用形如下面的查询聚合就可以完成。硬件不太差的情况下,上千万甚至数十亿的结果集做这种聚合没太大问题。
POST /sales/_search?size=0
{
"query" : {
"constant_score" : {
"filter" : {
"match" : { "type" : "hat" }
}
}
},
"aggs" : {
"hat_prices" : { "sum" : { "field" : "price" } }
}
}

neo

赞同来自:

同问scroll时不支持聚合,有什么方法解决大数据量的聚合需求?

neo

赞同来自:

继续求答

ancestor - 屌丝

赞同来自:

如果数据量过大,做预计算;可以尝试基于Spark+ES的方式,但个人觉得这样又引入Spark,投入产出比,可能不高
匿名用户

匿名用户

赞同来自:

简单粗暴,就直接scroll读出数据,自己一轮一轮的进行统计,不需要用什么spark。
但这样做,感觉太弱智了。难道es实际商用也就是一万条数据?各种厉害都是吹牛而已,没有实际应用?

neo

赞同来自:

就是我一次搜索符合条件的记录有500W条,能一次对500W条记录的某个字段进行sum吗?

liugang

赞同来自:

搜索取结果集有大小限制,有时要用scroll 
但aggs统计没有大小限制

要回复问题请先登录注册