我想了解 ES 如何在其索引内部存储日期值。它会转换为 UTC 吗?
我有一个日期类型的字段“t”。这是映射:
"t": { "type" : "date" },
现在,当我向 ES 插入/添加文档时,它如何存储在其索引中。
"t": "1427700477165"(从 Date.now() 函数生成的毫秒数)。 ES 是否以 UTC 识别其纪元时间并按原样存储?
"t": "2015-03-29T23:59:59"(我相应地调整映射日期格式)- ES 如何存储它。如果它转换为 UTC,它如何知道这个日期是哪个时区并将其转换为 UTC? ES 是否从其运行的机器获取默认时区?
谢谢!
最佳答案
在内部(在索引内)Elasticsearch 将所有日期存储为纪元格式的数字 - 即自格林威治标准时间 1970 年 1 月 1 日 00:00:00 以来的毫秒数。
但是默认情况下,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
关于datetime - 了解 elasticsearch 如何在内部存储日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29341715/