elasticsearch - Elasticsearch:按时间范围分组
问题描述
我进行了此查询以获取用户在上个月(或一天)与其他用户相比的请求数。
{
"query": {
"bool": {
"must": [
{
"range": {
"created": {
"gte": 1554854400000
}
}
}
]
}
},
"aggs": {
"requests": {
"filters": {
"other_bucket_key": "all",
"filters": {
"user": {
"match": {
"user_id": "XXXXXX"
}
}
}
}
}
}
}
这些是在选定时间段内提出的所有请求。
现在,我想获取用户在上个月与其他用户相比的请求数/天数。
我能够使用 Date Histogram Aggregation 来获得这个请求的总数,但我不知道如何将它分成用户和其余部分。
我不知道这是否可能,或者也许有另一种方法可以做到这一点。
解决方案
您走在正确的道路上,您只需将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"
}
}
}
}
}
}
}
}
}
对于每一天,您将获得用户发出的请求数与所有其他用户的请求数。
推荐阅读
- python - 在 CI 服务器上找不到 Python 包数据
- windows - 检测到 USB MIDI 接口但未连接
- powershell - 将共享邮箱权限导出到 .csv
- laravel - Kreait\Firebase\Exception\RuntimeException:无法创建 FirestoreClient:请求的客户端需要 gRPC 扩展
- opencv - 在 Opencv Python 上使用 Sobel 算子进行基于梯度的关键帧提取
- groovy - ConEmu 找不到 bash 命令
- c# - 表达式树的用例是什么?
- azure - 如何使用 Github 操作将多容器应用程序部署到 Azure?
- c - 我应该使用更通用的变量别名/类型还是使用我将使用的函数所采用的变量类型?
- javascript - 循环浏览页面以返回所有产品链接