使用自定义joda格式字符串在elasticsearch中解析日期字符串

时间:2018-06-11 22:23:49

标签: elasticsearch jodatime

试图弄清楚为什么这个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
}

1 个答案:

答案 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时区的习惯,但这是另一个故事。