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"
                }
              }
            }
          }
        }
      }
    }
  }
}

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