使用自定义 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 时区的习惯,但那是另一回事了。