三人行必有我师

es聚合统计的一个问题

Elasticsearch | 作者 amonxu | 发布于2018年06月19日 | 阅读数:5062

es中现有上报统计的数据多条,里面有几个关键字段:
user_id(上报用户的id), 
device_type(设备类型,有ios/android/h5/pc等),
report_position(上报位置,有首页/详情页/启动页等)
 现在想分别统计如下效果:
app的首页统计数量(即device_type为ios+android+h5、position为首页的数量),
app的详情页统计数量(即device_type为ios+android+h5、position为详情页的数量),
pc的首页统计数量(即device_type为pc、position为首页的数量)...
 
针对这个需求,我使用如下聚合查询,得到结果后再根据情况相加,可得到结果。
{
"query": {
"bool": {
"must": []
}
},
"aggs": {
"positionAgg": {
"terms": {
"field": "report_position"
},
"aggs": {
"deviceTypeAgg": {
"terms": {
"field": "device_type"
}
}
}
}
}
}
 
 
But,又来了一个新需求,需要在之前统计的情况下,再追加一个统计独立用户统计,
此时,我在deviceTypeAgg里再嵌套一个
"aggs": {
"userIdAgg": {
"terms": {
"field": "user_id"
}
}
}
得到结果后,情况有点不对,ios和android的独立用户互有异同,但是不能相加。
这下麻烦了,到底该怎么做,问了其它同事,有人建议直接分多次查询。
 
请教一下,有没有更好的办法可以解决这个问题呢?
 
顺便再问下,如果是多次查询,有没有比较方便的多次查询方式,
现在把查询条件放在BoolQueryBuilder中后,如果下一个查询再用,就不行了。
 
 
已邀请:

要回复问题请先登录注册