我想了解ES如何在其索引内部存储日期值。它转换为UTC吗?
我有一个类型为date的字段“t”。这是映射:
"t": { "type" : "date" },
现在,当我向ES插入/添加文档时,它如何存储在索引中。
“t”:“1427700477165”(从Date.now()函数生成的毫秒数)。 ES是否在UTC中识别其纪元时间并按原样存储?
“t”:“2015-03-29T23:59:59”(我相应地调整了映射日期格式) - ES如何存储它。如果它转换为UTC,它如何知道这个日期是什么时区并将其转换为UTC? ES是否从正在运行的计算机上获取默认时区?
谢谢!
答案 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
。
"t": { "type" : "date", "format" : "YYYY-MM-dd" }
yyyy/MM/dd
HH:mm:ss||yyyy/MM/dd