Elasticsearch:按时间范围分组
Elasticsearch: Group by timeframe
我进行此查询是为了获取与其他用户相比,用户在上个月(或一天)发出的请求数。
{
"query": {
"bool": {
"must": [
{
"range": {
"created": {
"gte": 1554854400000
}
}
}
]
}
},
"aggs": {
"requests": {
"filters": {
"other_bucket_key": "all",
"filters": {
"user": {
"match": {
"user_id": "XXXXXX"
}
}
}
}
}
}
}
这些是所选时间段内的所有请求。
现在,我想获取用户在上个月与其他用户相比每天发出的请求数。
我能够使用日期直方图聚合获得请求总数,但我无法弄清楚如何将其拆分为用户和其他人。
我不知道这是否可行,或者是否有其他方法可以做到这一点。
您走在正确的道路上,您只需要将 date_histogram
每日汇总和您已有的过滤器汇总相结合:
{
"query": {
"bool": {
"must": [
{
"range": {
"created": {
"gte": 1554854400000
}
}
}
]
}
},
"aggs": {
"per_day": {
"date_histogram": {
"field": "created",
"interval": "day"
},
"aggs": {
"requests": {
"filters": {
"other_bucket_key": "all",
"filters": {
"user": {
"match": {
"user_id": "XXXXXX"
}
}
}
}
}
}
}
}
}
对于每一天,您将获得用户发出的请求数与所有其他用户的请求数。
我进行此查询是为了获取与其他用户相比,用户在上个月(或一天)发出的请求数。
{
"query": {
"bool": {
"must": [
{
"range": {
"created": {
"gte": 1554854400000
}
}
}
]
}
},
"aggs": {
"requests": {
"filters": {
"other_bucket_key": "all",
"filters": {
"user": {
"match": {
"user_id": "XXXXXX"
}
}
}
}
}
}
}
这些是所选时间段内的所有请求。
现在,我想获取用户在上个月与其他用户相比每天发出的请求数。
我能够使用日期直方图聚合获得请求总数,但我无法弄清楚如何将其拆分为用户和其他人。
我不知道这是否可行,或者是否有其他方法可以做到这一点。
您走在正确的道路上,您只需要将 date_histogram
每日汇总和您已有的过滤器汇总相结合:
{
"query": {
"bool": {
"must": [
{
"range": {
"created": {
"gte": 1554854400000
}
}
}
]
}
},
"aggs": {
"per_day": {
"date_histogram": {
"field": "created",
"interval": "day"
},
"aggs": {
"requests": {
"filters": {
"other_bucket_key": "all",
"filters": {
"user": {
"match": {
"user_id": "XXXXXX"
}
}
}
}
}
}
}
}
}
对于每一天,您将获得用户发出的请求数与所有其他用户的请求数。