web-dev-qa-db-ja.com

Elasticsearchの日付形式

次の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の「タイムスタンプ」フィールドを解析するための正しい形式を定義するのを手伝ってくれる人はいますか?

ありがとう!!!

9
gleX

マッピングでわかるように、フィールドtimestampYYYY-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も使用する必要があります。

13
Sumit Kumar