Elasticsearch:按时间范围分组

时间:2019-05-10 14:09:53

标签: elasticsearch elasticsearch-aggregation

我进行了此查询,以获取该用户在过去一个月(或一天)中与其他用户相比发出的请求数。

{
"query": {
    "bool": {
        "must": [
            {
                "range": {
                    "created": {
                        "gte": 1554854400000
                    }
                }
            }
        ]
    }
},
"aggs": {
    "requests": {
        "filters": {
            "other_bucket_key": "all",
            "filters": {
                "user": {
                    "match": {
                        "user_id": "XXXXXX"
                    }
                }
            }
        }
    }
}
}

这些是在选定时间段内发出的所有请求。
现在,我想获得与其他用户相比,上个月该用户每天发出的请求数。
我可以使用“日期直方图聚合”获取所请求的总数,但是我不知道如何将其分为用户和其余。
我不知道这是否可行,或者还有另一种方式。

1 个答案:

答案 0 :(得分:0)

您走在正确的道路上,只需要将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"
                }
              }
            }
          }
        }
      }
    }
  }
}

每天,您将获得用户发出的请求数与所有其他用户发出的请求数。