首页 文章

Elasticsearch日期格式

提问于
浏览
8

我正在尝试将以下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"
            }
         }
      }
   }
}

以及与“timestamp”字段相关的错误 .

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

我尝试了一些日期格式,但没有人成功 . 任何人都可以帮我定义正确的格式来解析elasticsearch中的“timestamp”字段吗?

谢谢!!!

1 回答

  • 10

    正如您在映射中所看到的那样,您的字段 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 .

相关问题