我试图将数据插入Elastisearch 2.2.0,并将映射作为:
...
"startTime": {
"format": "yyyy/MM/dd HH:mm:ss",
"type": "date"
}
...
插入的数据是(字符串):
...
"startTime":1454858900301
...
我得到例外:
MapperParsingException[failed to parse [startTime]]; nested: IllegalArgumentException[Invalid format: "1454858900301" is malformed at "0301"];
Caused by: java.lang.IllegalArgumentException: Invalid format: "1454858900301" is malformed at "0301"
at org.joda.time.format.DateTimeParserBucket.doParseMillis(DateTimeParserBucket.java:187)
at org.joda.time.format.DateTimeFormatter.parseMillis(DateTimeFormatter.java:780)
at org.elasticsearch.index.mapper.core.DateFieldMapper$DateFieldType.parseStringValue(DateFieldMapper.java:362)
at org.elasticsearch.index.mapper.core.DateFieldMapper.innerParseCreateField(DateFieldMapper.java:528)
at org.elasticsearch.index.mapper.core.NumberFieldMapper.parseCreateField(NumberFieldMapper.java:241)
at org.elasticsearch.index.mapper.FieldMapper.parse(FieldMapper.java:335)
在Elastic版本1.5.2中没有发生过,在我升级到2.2.0之前,我使用了应该列出所有映射问题的migration plugin - 没有出现......
导致例外的原因是什么?我插入长纪元时间字符串(以毫秒为单位),假设要解析为我在映射中列出的格式,不是吗?
为什么它在1.5.2中工作而在2.2.0中失败?
答案 0 :(得分:1)
我认为你必须通过ES 2.X中的breaking change in date format。来自文档,
在2.0中,我们添加了两种格式:epoch_millis和epoch_second。只要 使用这些格式的日期字段将能够解析时间戳
迁移工具无法检测到这一点,因为这不是映射问题。作为解决方案,您可能需要将日期格式更改为epoch_millis或epoch_second中的任何一种。