弹性搜索中的自定义日期格式

时间:2017-11-17 10:34:58

标签: elasticsearch jodatime

我正在尝试使用joda-time库格式在弹性搜索中格式化日期字段。我想实现格式"Mon Sep 18 17:12:37 IST 2017"。首先我使用以下代码:

"alarm_timestamp": {
    "type": "date",
    "format": "EEE MMM d H:m:s zzz YYYY"
}

它不起作用。后来,我读到了here提出的问题。所以,我改变了代码:

"alarm_timestamp": {
    "type": "date",
    "format": "E MMM d H:m:s z Y"
}

在这两种情况下,都成功创建了映射。但是,当我尝试索引数据时,它给出了错误。

它给出的错误是:

{
    "error": {
        "root_cause": [
            {
              "type": "mapper_parsing_exception",
              "reason": "failed to parse [alarm_timestamp]"
            }
        ],
        "type": "mapper_parsing_exception",
        "reason": "failed to parse [alarm_timestamp]",
        "caused_by": {
            "type": "illegal_argument_exception",
            "reason": "Invalid format: \"Mon Sep 18 17:12:37 IST 2017\" is malformed at \"IST 2017\""
        }
    },
    "status": 400
}

有任何建议吗?

1 个答案:

答案 0 :(得分:0)

来自format的Elasticsearch documentation

  

支持完全自定义的日期格式。的语法   这些在Joda文档中有解释。

Joda docsz

  

区域名称:无法解析时区名称('z')。

问题是时区的IST这些缩写可能不明确。

Wikipedia Time Zone页面说明如下:

  

<强>缩写
  时区   通常用字母缩写表示,如“EST”,   “WST”和“CST”,但这些不属于国际时间和   日期标准ISO 8601及其作为唯一指定者的用途   不鼓励区域。这种指定可能含糊不清;例如,   “ECT”可以解释为“东加勒比时间”(UTC-4h),   “厄瓜多尔时间”(UTC-5h),或“欧洲中部时间”(UTC + 1h)。

所以你会看到一些缩写会有效,有些则不会。鼓励不要使用这些缩写。而是使用以下之一:

  • E MMM d H:m:s Z Y,索引为Mon Sep 18 17:12:37 +02:00 2017

  • E MMM d H:m:s ZZZ Y,索引为Mon Sep 18 17:12:37 Europe/Istanbul 2017

以下是Joda的Available Time Zones列表。