【发布时间】:2020-03-30 09:22:27
【问题描述】:
我有一个案例,我需要提取在给定时间段内多次出现的用户(user_id)。我创建了一个聚合,我可以在其中提取和计算它们在一段时间内出现的实例,但它们应该不在下一个日期左右再次计算,它应该只出现一次。
这就像计算给定时间段的唯一用户注册,您只需要计算他们出现的第一个实例/日期。日期过滤器可以是每小时、每天、每周、每月。
user_id_1 2020-01-05
user_id_1 2020-02-06
user_id_1 2020-02-14
user_id_2 2020-02-03
user_id_2 2020-02-04
user_id_3 2020-03-03
user_id_1 2020-03-15
user_id_2 2020-03-21
user_id_3 2020-03-25
user_id_3 2020-04-01
预期的输出应该是,在他们第一次出现的月份只计算一次。他们不应该在其他月份再次计算
user_id_1 | 1 count | 2020-01-05
user_id_2 | 1 count | 2020-02-03
user_id_3 | 1 count | 2020-03-03
Total | 3 counts|
这是我想出的示例代码。它计算在给定时间段内出现的 user_ids 的实例。
{
"size":0,
"aggs":{
"result":{
"date_range":{
"field":"timestamp",
"format":"yyyy-MM-dd",
"ranges":[
{
"from":"2020-01-01",
"to":"2020-03-31"
}
]
},
"aggs":{
"histogram":{
"date_histogram":{
"field":"timestamp",
"calendar_interval":"1M",
"extended_bounds":{
"min":"2020-01-01",
"max":"2020-03-31"
},
"format":"yyyy-MM-dd"
},
"aggs":{
"user_sigups":{
"terms":{
"field":"user_id.keyword"
}
}
}
}
}
}
}
}
上述查询的示例结果如下所示。
{
"histogram":{
"buckets":[
{
"key_as_string":"2020-01-01",
"key":1577836800000,
"doc_count":1925,
"user_sigups":{
"doc_count_error_upper_bound":0,
"sum_other_doc_count":328,
"buckets":[
{
"key":"2532456443539602",
"doc_count":505
}
]
}
}
]
}
}
任何帮助将不胜感激。
【问题讨论】:
标签: elasticsearch