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

use*_*423 7 lucene datetime elasticsearch

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

我有一个日期类型的字段"t".这是映射:

"t": { "type" : "date" },
Run Code Online (Sandbox Code Playgroud)

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

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

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

谢谢!

Oll*_*ank 14

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

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

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

"t": { "type" : "date", "format" : "basic_date_time" }
Run Code Online (Sandbox Code Playgroud)

yyyyMMdd'T'HHmmss.SSSZ.

或指定自定义日期格式:

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

  • 如果没有给出时区信息,Elasticsearch会假定UTC (3认同)