从1.5.2升级后,Elasticsearch 2.2.0日期格式失败

时间:2016-02-07 15:57:49

标签: elasticsearch elasticsearch-plugin

我试图将数据插入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中失败?

1 个答案:

答案 0 :(得分:1)

我认为你必须通过ES 2.X中的breaking change in date format。来自文档,

  

在2.0中,我们添加了两种格式:epoch_millis和epoch_second。只要   使用这些格式的日期字段将能够解析时间戳

迁移工具无法检测到这一点,因为这不是映射问题。作为解决方案,您可能需要将日期格式更改为epoch_millis或epoch_second中的任何一种。