一尘不染

了解Elasticsearch如何在内部存储日期

elasticsearch

我想了解ES如何在其索引内部存储日期值。可以转换为UTC吗?

我有一个日期类型的字段“ t”。这是映射:

"t": { "type" : "date" },

现在,当我向ES插入/添加文档时,它如何存储在索引中。

  1. “ t”:“ 1427700477165”(从Date.now()函数生成的毫秒数)。ES是否在UTC中识别其时代时间并按原样存储?

  2. “ t”:“ 2015-03-29T23:59:59”(我会相应地调整映射日期格式)-ES如何存储它。如果将其转换为UTC,如何知道该日期是哪个时区并将其转换为UTC?ES是否从运行其的计算机获取默认时区?

谢谢!


阅读 396

收藏
2020-06-22

共1个答案

一尘不染

内部(在索引内)Elasticsearch将所有日期存储为以纪元格式的数字-即自格林尼治标准时间1970年1月1日00:00:00以来的毫秒数。

但是默认情况下,Elasticsearch也会存储您的原始JSON发布消息-
因此,返回时,_source您会看到发布到Elasticsearch的所有内容。

为了能够将日期字符串导入为纪元格式,您需要在映射中指定格式,例如预定义的日期格式

"t": { "type" : "date", "format" : "basic_date_time" }

yyyyMMdd'T'HHmmss.SSSZ

或指定自定义日期格式

"t": { "type" : "date", "format" : "YYYY-MM-dd" }
  • 如果未指定格式,则使用的默认日期解析为 ISODateTimeFormat.dateOptionalTimeParser
  • 可以在映射中指定多种日期格式-例如 yyyy/MM/dd HH:mm:ss||yyyy/MM/dd
  • 如果未指定时区,则Elasticsearch假定为 UTC
2020-06-22