在elasticsearch中得到最后一个小时的logging

我在date列上有以下映射:

"order_datetime": { "type": "date", "format" : "yyyy-Md H:m:s" } 

我正在查询中使用下面的范围filter获取最后一小时logging:

 { "range": { "order_datetime": { "gte": "now-1h", "lte": "now" } } } 

我得到的是在当前时间5到6小时之前订购的订单。 任何人都可以解释为什么发生? 我认为这是一个时区问题,所以附加time_zone如下:

 { "range": { "order_datetime": { "gte": "now-1h", "lte": "now", "time_zone": "+05:30" } } } 

我仍然得到相同的结果。 请帮忙

首先,知道您是否使用Kibana来可视化您的数据是有用的?

这种行为有点奇怪,但可以解释。

弹性假定您使用UTC存储date(除非另有说明)。 假设现在是您的时区的16:30,并且您在date字段中以16:30为索引文档。 弹性认为这是UTC的16:30,而实际上只有11:00在UTC(假设你是5:30前) – Elastic的date现在是UTC。

所以,你有两个select –

  1. 为您的数据build立索引,以便通过时区和date
  2. 将您的查询更改为"lte": "now+5h+30m"

在范围查询中指定time_zone ,根据文档, now不做任何事情。

请参阅“范围查询中的时区” – https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-range-query.html

Interesting Posts