关于elasticsearch二次聚合的问题
现在我们有一张消费明细表(一个人有多条消费记录)
首先我们想计算出一个人的总消费金额
然后我们想得到总消费大于500美金的所有人数
那么我们需要在计算出一个人总消费金额的基础上进行二次聚合
比如sql的实现就是:
select count(1)
from (select *
from (select mobile_nbr, sum(trans_amt) total_trans_amt
from activity_detail
group by mobile_nbr) t
where t.total_trans_amt > 500) tt
请问一下,es支持这种查询么~
现在我们有一张消费明细表(一个人有多条消费记录)
首先我们想计算出一个人的总消费金额
然后我们想得到总消费大于500美金的所有人数
那么我们需要在计算出一个人总消费金额的基础上进行二次聚合
比如sql的实现就是:
select count(1)
from (select *
from (select mobile_nbr, sum(trans_amt) total_trans_amt
from activity_detail
group by mobile_nbr) t
where t.total_trans_amt > 500) tt
请问一下,es支持这种查询么~
2 个回复
fantuan
赞同来自:
bucket selector选出大于500美金的人数
https://www.elastic.co/guide/e ... .html
bellengao - 博客: https://www.jianshu.com/u/e0088e3e2127
赞同来自:
"aggs": {
"one": {
"terms": {
"field": "mobile_nbr"
},
"aggs": {
"x": {
"sum": {
"field": "trans_amt"
}
},
"sum_bucket_filter": {
"bucket_selector": {
"buckets_path": {
"totalSum": "x"
},
"script": "params.totalSum > 500"
}
}
}
},
"stats_buckets": {
"stats_bucket": {
"buckets_path": "one.x"
}
}
}
}