【问题标题】:Elasticsearch date formatElasticsearch 日期格式
【发布时间】:2016-12-11 21:59:21
【问题描述】:

我正在尝试将以下 JSON 输入发送到 elasticsearch,但出现解析器错误。

这是 JSON 输入

{
    "chassisNumber": "654321",
    "position": "40.480143, -3.688960",
    "issue": "Position",
    "timestamp": "2016-07-15T15:29:50+02:00[Europe/Paris]"
}

索引定义

{
   "mappings":{
      "vehicle":{
         "properties":{
            "vehicle":{
               "type":"string"
            },
            "position":{
               "type": "geo_point"
            },
            "issue":{
               "type":"string"
            },
            "timestamp":{
               "type":"date",
               "format":"YYYY-MM-DD'T'HH:mm:ssZ"
            }
         }
      }
   }
}

以及与“时间戳”字段相关的错误。

"reason": "Invalid format: \"2016-07-15T15:29:50+02:00[Europe/Paris]\" is malformed at \"[Europe/Paris]\""

我尝试了几种日期格式,但都没有成功。谁能帮我定义正确的格式来解析elasticsearch中的“时间戳”字段?

谢谢!!!

【问题讨论】:

  • 您需要删除[Europe/Paris] 部分,因为+02:00 就足够了。

标签: datetime elasticsearch timestamp datetime-format


【解决方案1】:

正如您在映射中看到的那样,您的字段timestamp 被映射为date 类型,格式为YYYY-MM-DD'T'HH:mm:ssZ。因此,Elasticsearch 希望timestamp 字段以相同的格式传递。您传递的数据是2016-07-15T15:29:50+02:00[Europe/Paris],其中包括[Europe/Paris],位于映射中未提供的区域数据之后,并且不遵循Elasticsearch支持的默认ISO 8601格式(更多数据可用here)。

您可以阅读更多关于 Elasticsearch 支持的默认日期格式here

所以要么您必须删除传递给 Elasticsearch 的额外数据并根据映射保留它

{
    "chassisNumber": "654321",
    "position": "40.480143, -3.688960",
    "issue": "Position",
    "timestamp": "2016-07-15T15:29:50+02:00"
}

或将映射更改为遵循定义 here 的 joda 语法的自定义日期格式。在您的情况下,如果需要文字区域,您也必须使用 z

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 2015-11-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多