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

时间:2015-03-30 08:40:01

标签: datetime elasticsearch lucene

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

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

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

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

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

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

  3. 谢谢!

1 个答案:

答案 0 :(得分:14)

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

然而,默认情况下,Elasticsearch也会存储您的原始JSON发布消息 - 因此在返回_source时,您将看到发布到Elasticsearch的任何内容。

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

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

代表yyyyMMdd'T'HHmmss.SSSZ

或指定custom date format

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