我不确定我是否正确使用了这些词,但基本上我想使用elasticsearch_dsl进行聚合
按日期分开
按app分开
计算唯一身份用户ID
为1,我知道我必须使用date_histogram,但是,对于2和3,我不确定如何形成我的命令
对于映射,它看起来像:
"protperties":{
"app": {"field1": {......},
"name": "....",
"id": 1
},
"time": {......},
"user": {"id": 2,
"field3": ......
}
}
所以app.id和user.id都是嵌套的
我的目标是获得一个看起来像
的json对象{'users': {
'app1': {date_1: 1},
'app2': {date_2: 1},
'app3': {date_3: 1}}}
其中app1,app2和app3是应用名称
我尝试使用s.aggs.bucket('app.name_na', 'date_histogram', field='time', interval='day').bucket('app', app_agg).bucket('users', id_agg)
app_agg
和ip_agg
正在使用A
来构建{'terms': {'field': 'app.name'}, 'aggs': {'users': {'cardinality': {'field': 'user.id'}}}}
和{'cardinality': {'field': 'user.id'}}
,或者某些变体这个命令,但结果要么不能形成,要么不是我正在寻找的。我想知道如何使用elasticsearch_dsl
答案 0 :(得分:0)
对于您想要的嵌套聚合 -
- 按日期分开
- 按app分开
- 统计唯一身份用户ID
醇>
我会选择:
{
"size": 0,
"aggregations": {
"dates_agg": {
"date_histogram": {
"field": "time",
"interval": "1d"
},
"aggregations":{
"apps_agg":{
"terms":{
"field": "app"
},
"aggregations":{
"users_agg":{
"terms":{
"field": "user"
}
}
}
}
}
}
}
}
说明:
dates_agg - 将按天分隔,您可以定义不同的间隔 Time Units
apps_agg - 将app
使用Terms Aggregation分隔 - 术语聚合还会计算每个广告资源的文档编号。
users_agg - 将user
分隔,此时此应用的用户数量将为存储桶数量。