次の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の「タイムスタンプ」フィールドを解析するための正しい形式を定義するのを手伝ってくれる人はいますか?
ありがとう!!!
マッピングでわかるように、フィールドtimestamp
はYYYY-MM-DD'T'HH:mm:ssZ
形式のdate
タイプとしてマップされています。そのため、Elasticsearchではtimestamp
フィールドを同じ形式で渡す必要があります。渡すデータは、2016-07-15T15:29:50+02:00[Europe/Paris]
です。これには、マッピングで指定されておらず、Elasticsearchがサポートするデフォルトの[Europe/Paris]
形式に従わないゾーンデータの後のISO 8601
が含まれます(利用可能なデータが多い here )。
Elasticsearchがサポートするデフォルトの日付形式については、こちらをご覧ください こちら 。
したがって、Elasticsearchに渡された余分なデータを削除し、マッピングに従って保持する必要があります
{
"chassisNumber": "654321",
"position": "40.480143, -3.688960",
"issue": "Position",
"timestamp": "2016-07-15T15:29:50+02:00"
}
または、定義済みのjoda構文に従うカスタム日付形式にマッピングを変更します here 。あなたの場合、リテラルゾーンが必要な場合は、z
も使用する必要があります。