对于时间戳,我使用的ISO格式包含区域ID,定义为:
yyyy-MM-dd'T'HH:mm:ss.SSS'Z['z']'
此格式例如匹配这两个时间戳:
2015-02-20T09:46:56.336Z[UTC]
2015-02-20T10:46:55.221+01:00[Europe/Berlin]
为了将数据索引到elasticsearch,我还在这样的映射中定义了这种日期格式(使用elastic4s DSL):
create index indexName mappings {
"/exampleType" as (
"exampleField" typed DateType
) dynamicDateFormats "yyyy-MM-dd'T'HH:mm:ss.SSS'Z['z']'"
}
基本上这个映射按预期工作,但是由于区域ID,格式化日期字符串变得太长时遇到问题。 E. g。上面的例子
2015-02-20T09:46:56.336Z[UTC]
有30个字符可以正常工作,而
2015-02-20T10:46:55.221+01:00[Europe/Berlin]
有44个字符无法索引并出现以下错误:
...
Caused by: java.io.IOException: Cannot read numeric data larger than 32 chars
at org.elasticsearch.index.analysis.NumericTokenizer.incrementToken(NumericTokenizer.java:78) ~[elasticsearch-1.4.2.jar:na]
at org.apache.lucene.index.DefaultIndexingChain$PerField.invert(DefaultIndexingChain.java:618) ~[lucene-core-4.10.2.jar:4.10.2 1634293 - mike - 2014-10-26 05:51:56]
at org.apache.lucene.index.DefaultIndexingChain.processField(DefaultIndexingChain.java:359) ~[lucene-core-4.10.2.jar:4.10.2 1634293 - mike - 2014-10-26 05:51:56]
...
我的问题是,是否有办法解决这个问题e。 G。通过配置或我被迫更改我的日期格式,以确保格式化日期不超过32个字符。