使用自定义 joda 格式字符串解析 elasticsearch 中的日期字符串
Parse date string in elasticsearch using custom joda format string
正在尝试找出此 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
}
为了保存映射,要使用的正确格式是这种格式,即您需要转义 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 time 不会将时区解析为 "explained" in their documentation:
Zone names: Time zone names ('z') cannot be parsed.
因此,您唯一的选择是在索引文档之前删除括号中的时区,模式 E MMM dd yyyy HH:mm:ss 'GMT'Z||epoch_millis
将正常工作。反正括号里的时区是没用的
另一方面,您应该养成将所有日期存储在 GMT 时区的习惯,但那是另一回事了。
正在尝试找出此 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
}
为了保存映射,要使用的正确格式是这种格式,即您需要转义 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 time 不会将时区解析为 "explained" in their documentation:
Zone names: Time zone names ('z') cannot be parsed.
因此,您唯一的选择是在索引文档之前删除括号中的时区,模式 E MMM dd yyyy HH:mm:ss 'GMT'Z||epoch_millis
将正常工作。反正括号里的时区是没用的
另一方面,您应该养成将所有日期存储在 GMT 时区的习惯,但那是另一回事了。