2016-08-05 52 views
5

我試圖發送以下JSON輸入到elasticsearch,但我得到一個解析器錯誤。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中的「時間戳」字段嗎?

謝謝!

+1

您需要刪除'[Europe/Paris]'部分,因爲'+02:00'就足夠了,所以不需要。 – Val

回答

4

正如您在映射中看到的,您的字段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上閱讀更多內容。

因此,無論您需要刪除通過根據映射

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

到Elasticsearch並保持或改變你的映射到其定義如下here的喬達語法自定義日期格式的額外數據。在你的情況下,如果它是文字區需要你也必須使用z