试图弄清楚为什么这个joda自定义格式导致错误。我试图匹配这个日期字符串:
Wed May 23 2018 13:45:04 GMT-0700 (Pacific Daylight Time)
使用这个joda自定义格式字符串:
E MMM dd yyyy HH:mm:ss z (zzzz)||epoch_millis
我在开发控制台中执行此操作以测试使用该格式的映射。 Elasticsearch并不喜欢它:
PUT /twitter
{}
PUT /twitter/_mapping/_doc
{
"properties": {
"TxnDate": {
"type": "date",
"format": "E MMM dd yyyy HH:mm:ss z (zzzz)||epoch_millis"
}
}
}
Elasticsearch正在回归:
{
"error": {
"root_cause": [
{
"type": "illegal_argument_exception",
"reason": "Incomplete parser array"
}
],
"type": "illegal_argument_exception",
"reason": "Incomplete parser array"
},
"status": 400
}
答案 0 :(得分:1)
为了使映射保存,要使用的格式正确,即你需要转义GMT-
和括号。
E MMM dd yyyy HH:mm:ss 'GMT'Z '('ZZZZ')'||epoch_millis
然而,遗憾的是,这不是故事的结尾......在使用Wed May 23 2018 13:45:04 GMT-0700 (Pacific Daylight Time)
之类的日期保存文档时,您会在编制索引时收到解析错误。这里的问题是Joda时间没有将时区解析为"explained" in their documentation:
区域名称:无法解析时区名称(' z')。
因此,您唯一的选择是在索引文档之前删除括号中的时区,并且模式E MMM dd yyyy HH:mm:ss 'GMT'Z||epoch_millis
将正常工作。无论如何,括号中的时区都是无用的。
另一方面,您应该养成将所有日期存储在GMT时区的习惯,但这是另一个故事。