弹性搜索中的now函数问题

时间:2017-02-22 07:05:24

标签: elasticsearch

我在弹性搜索2.3中尝试日期范围聚合。我希望将它们汇总为过去30天,过去7天和今天。因此,我的聚合查询的一部分如下:

"range": {
   "ranges": [
      {
        "from": "now-30d/d",
        "to": "now/d"
      },
      {
        "from": "now-7d/d",
        "to": "now/d"
      },
      {
        "from": "now/d",
        "to": "now+1d/d"
      }
    ],
    "format": "yyyy-MM-dd"
  }

这导致了以下桶:

"buckets": [
    {
      "key": "2017-01-23-2017-02-22",
      "from": 1485129600000,
      "from_as_string": "2017-01-23",
      "to": 1487721600000,
      "to_as_string": "2017-02-22",
      "doc_count": 6
    },
    {
      "key": "2017-02-15-2017-02-22",
      "from": 1487116800000,
      "from_as_string": "2017-02-15",
      "to": 1487721600000,
      "to_as_string": "2017-02-22",
      "doc_count": 6
    },
    {
      "key": "2017-02-22-2017-02-23",
      "from": 1487721600000,
      "from_as_string": "2017-02-22",
      "to": 1487808000000,
      "to_as_string": "2017-02-23",
      "doc_count": 0
    }
  ]

安装elasticsearch的机器中date命令的输出如下:

Tue Feb 21 23:01:59 PST 2017

从存储桶中可以看出,elasticsearch函数now的计算结果为2017-02-22,但我预计它会为2017-02-21。我在这里错过了什么?

提前致谢。

1 个答案:

答案 0 :(得分:0)

再次阅读文档后,我了解到now函数使用UTC时间而不是安装了elasticsearch的机器的时区。因此看到了这种行为。这已在最新版本的elasticsearch中修复,其中time_zone属性可以在日期范围聚合中指定。这个问题在这里被跟踪 - https://github.com/elastic/elasticsearch/issues/10130