Elasticsearch date format parsing error

covfefe picture covfefe · Feb 21, 2018 · Viewed 9.3k times · Source

I am trying to specify a date format for an Elasticsearch field according to ISO 8601 as:

YYYY-MM-DDThh:mm:ssTZD

I put the field mapping like so:

"properties": {
                        "startDate": {
                            "type": "date",
                            "format": "YYYY-MM-DD'T'hh:mm:ss'TZD'"
                        }
              }

When I try to insert a document with this field's value as: "startDate": "2018-01-10T07:07:07+01:00", I get this error:

"type": "mapper_parsing_exception",
        "reason": "failed to parse [afield.startDate]",
        "caused_by": {
            "type": "illegal_argument_exception",
            "reason": "Invalid format: \"2018-01-10T07:07:07+01:00\" is malformed at \"+01:00\""
        }

Is there something wrong in the date I am inserting? I'm following the example given in this W3C guide (https://www.w3.org/TR/NOTE-datetime):

Complete date plus hours, minutes and seconds:

YYYY-MM-DDThh:mm:ssTZD (eg 1997-07-16T19:20:30+01:00) 

Answer

Antonio Val picture Antonio Val · Feb 22, 2018

For custom date formats in Elasticsearch you have to check the Joda-time documentation.

In your case you can try with yyyy-MM-dd'T'HH:mm:ssZ:

"properties": {
  "startDate": {
    "type": "date",
    "format": "yyyy-MM-dd'T'HH:mm:ssZ"
  }
}

With this you should be able to insert dates and make searches using the dates like the one you used in your example: 2018-01-10T07:07:07+01:00.