Отображение индекса в формате даты с использованием исключения разбора curl throws - PullRequest
1 голос
/ 05 марта 2020

Попытка указать формат (в отображении индекса) для поля date в ES 7.6. Любые из них не принимаются:

        "createdAt" : {
          "type" : "date",
          "format": "yyyy-MM-dd'''T'''HH:mm:ss.SSSZZ"
        },
        "createdAt" : {
          "type" : "date",
          "format": "yyyy-MM-dd'T'HH:mm:ss.SSSZZ"
        },

Ошибка всегда одинакова:

"type": "invalid_argument_exception", "reason": "Неверный формат: [гггг-мм-ддтчч: мм: сс.SSSZZ]: неизвестная буква шаблона: T ",

Вот полный пример для воспроизведения:

curl -X DELETE "localhost:9200/example?pretty"
curl -X PUT   "localhost:9200/example/_mappings?pretty" -H 'Content-Type: application/json' -d' {
      "dynamic": false,
      "properties" : {
        "name" : {
          "type" : "text"
        },
        "createdAt" : {
          "type" : "date",
          "format" : "yyyyMMdd'T'HHmmss.SSSZ"
        }
      }
}'

1 Ответ

2 голосов
/ 05 марта 2020

Вы можете проверить различные поддерживаемые форматы даты на https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-date-format.html:

Правильный формат для вашего формата даты ниже

"format" : "yyyyMMdd'T'HHmmss.SSSZ" (нет - между yyyyMMdd)

Я только что создал индекс в формате ниже, так что вы можете попробовать сами:

{
  "mappings": {
    "properties": {
      "date": {
        "type": "date" ,
        "format" : "yyyyMMdd'T'HHmmss.SSSZ" --> notice there is no `-` in yyyyymmdd
      }
    }
  }
}

РЕДАКТИРОВАТЬ: - Согласно В последнем обновлении от OP он использует команду curl для создания индексов, поэтому ему необходимо экранировать апостроф (''), присутствующий в поле даты T.

Правильно curl команда будет выглядеть так:

curl -X PUT "localhost:9500/example/_mappings?pretty" -H 'Content-Type: application/json' -d' {
      "dynamic": false,
      "properties" : {
        "name" : {
          "type" : "text"
        },
        "createdAt" : {
          "type" : "date",
          "format" : "yyyyMMdd'\''T'\''HHmmss.SSSZ" --> notice escape `T`
        }
      }
}'

, что дает правильный вывод в curl:

{
  "acknowledged" : true
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...