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

understanding how elasticsearch stores dates internally

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

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

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

现在当我 insert/add 一个文档到 ES 时,它是如何存储在它的索引中的。

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

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

谢谢!

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