小编Cla*_*dio的帖子

使用带有固定间隔 (30d) 的 date_histogram 意外存储桶开始

我需要每 30 天(而不是每月)聚合一次数据,因此我使用date_histogramwith"fixed_interval": "30d"来获取该数据。例如,如果用户想要最近 90 天的聚合,则应该有 3 个存储桶:[90-60, 60-30, 30-0]。以今天的日期(2021 年 3 月 18 日)为例,我想要桶 [12 月 18 日、1 月 17 日、2 月 16 日]。

然而,我实际得到的是[12月4日,1月3日,2月2日,3月4日]。第一个存储桶的启动时间早于任何可用数据,这也意味着最终需要比预期更多的存储桶。

我发现您无法轻易判断您的存储桶何时开始(例如,我希望我的第一个存储桶在今天 - 90 天开始)。根据我能找到的内容(例如this ) ,桶似乎从 1970-01-01 开始,文档也​​有点这样说(这个链接,尽管它没有深入影响影响)。

考虑到这一点,我发现我可以使用offset一个“有趣的公式”,这样我就能得到我需要的正确的桶。例如:

GET /my_index/_search?filter_path=aggregations
{
  "size": 0,
  "query": {
    "bool": {
      "must": [
        { "range" : {
          "@timestamp" : {
              "gte" : "TODAY - 90/60/30",
              "lt" : "TODAY"
          }}
        }
      ]
    }
  },
  "aggs": {
    "discussion_interactions_chart": {
      "date_histogram": …
Run Code Online (Sandbox Code Playgroud)

elasticsearch date-histogram elasticsearch-aggregation

5
推荐指数
1
解决办法
2286
查看次数