Spec-Zone.ru › Elasticsearch 8
›Руководство по Elasticsearch [8.17] ›Отображение ›Параметры отображения

формат

В JSON-документах даты представлены в виде строк. Elasticsearch использует набор предварительно настроенных форматов для распознавания и парсинга этих строк в значение типа long, представляющее миллисекунды с начала эпохи в UTC.

Помимо встроенных форматов, свои пользовательские форматы можно указать, используя знакомый синтаксис yyyy/MM/dd:

resp = client.indices.create(
    index="my-index-000001",
    mappings={
        "properties": {
            "date": {
                "type": "date",
                "format": "yyyy-MM-dd"
            }
        }
    },
)
print(resp)
response = client.indices.create(
  index: 'my-index-000001',
  body: {
    mappings: {
      properties: {
        date: {
          type: 'date',
          format: 'yyyy-MM-dd'
        }
      }
    }
  }
)
puts response
res, err := es.Indices.Create(
	"my-index-000001",
	es.Indices.Create.WithBody(strings.NewReader(`{
	  "mappings": {
	    "properties": {
	      "date": {
	        "type": "date",
	        "format": "yyyy-MM-dd"
	      }
	    }
	  }
	}`)),
)
fmt.Println(res, err)
const response = await client.indices.create({
  index: "my-index-000001",
  mappings: {
    properties: {
      date: {
        type: "date",
        format: "yyyy-MM-dd",
      },
    },
  },
});
console.log(response);
PUT my-index-000001
{
  "mappings": {
    "properties": {
      "date": {
        "type":   "date",
        "format": "yyyy-MM-dd"
      }
    }
  }
}

Многие API, поддерживающие значения дат, также поддерживают выражения математики дат, такие как now-1m/d — текущее время минус один месяц, округлённое вниз до ближайшего дня.

Пользовательские форматы дат

Поддерживаются полностью настраиваемые форматы дат. Синтаксис этих форматов описан в документации DateTimeFormatter.

Отличия в информации о локали между версиями JDK

Между версиями JDK и различными локали могут быть некоторые отличия в форматах дат. В частности, могут быть различия в текстовых строках, используемых для текстовых форматов дат, и различия в результатах расчётов дат недели.

Различия могут быть в текстовых строках, используемых следующими спецификаторами поля:

  • B, E, G, O, a, v, z любой длины
  • L, M, Q, q, c, e длиной 3 или более
  • Z длиной 4

Если формат текста изменяется между версиями Elasticsearch или JDK, это может привести к существенным проблемам с импортом, выводом и повторной индексацией. Рекомендуется всегда использовать числовые поля в пользовательских форматах дат, которые не зависят от информации о локали.

Также могут быть различия в расчётах дат недели с использованием спецификаторов поля Y, W и w. Данные, используемые для расчёта дат недели, могут отличаться в зависимости от версии JDK и локали; это может привести к различиям в рассчитанной дате недели для одних и тех же календарных дат. Рекомендуется использовать встроенные форматы дат недели, которые всегда будут использовать правила ISO для расчёта дат недели.

В частности, существует существенное изменение информации о локали между версиями JDK 22 и 23. Elasticsearch будет использовать базу данных локали COMPAT при работе с JDK 22 и ранее, и будет использовать базу данных локали CLDR при работе с JDK 23 и выше. Это изменение может привести к существенным различиям в текстовых форматах дат, принимаемых Elasticsearch, и в рассчитанных датах недели. Если вы используете затронутые спецификаторы, вам может потребоваться изменить код интеграции импорта или вывода, чтобы учесть различия между этими двумя версиями JDK.

Встроенные форматы

Большинство из нижеприведённых форматов имеют компаньон-формат strict, что означает, что части года, месяца и дня должны соответственно использовать ровно 4, 2 и 2 цифры, потенциально добавляя нули. Например, дата, подобная 5/11/1, будет считаться недействительной и должна быть переписана как 2005/11/01, чтобы быть принятой анализатором дат.

Для их использования необходимо добавить префикс strict_ к имени формата даты, например strict_date_optional_time вместо date_optional_time.

Эти строгие форматы дат особенно полезны при динамическом отображении полей дат, чтобы гарантировать, что случайно не будут отображаться некорректные строки как даты.

В следующих таблицах перечислены все поддерживаемые встроенные форматы ISO:

epoch_millis
Форматтер для количества миллисекунд с начала эпохи. Обратите внимание, что эта метка времени ограничена пределами Java Long.MIN_VALUE и Long.MAX_VALUE.
epoch_second
Форматтер для количества секунд с начала эпохи. Обратите внимание, что эта метка времени ограничена пределами Java Long.MIN_VALUE и Long. MAX_VALUE, делёнными на 1000 (количество миллисекунд в секунде).
date_optional_time или strict_date_optional_time

Общий парсер ISO даты и времени, где дата должна содержать как минимум год, а время (разделенное T) является необязательным. Примеры: yyyy-MM-dd'T'HH:mm:ss.SSSZ или yyyy-MM-dd.

NOTE: When using `date_optional_time`, the parsing is lenient and will attempt to parse
numbers as a year (e.g. `292278994` will be parsed as a year). This can lead to unexpected results
when paired with a numeric focused format like `epoch_second` and `epoch_millis`.
It is recommended you use `strict_date_optional_time` when pairing with a numeric focused format.
strict_date_optional_time_nanos
Общий парсер ISO даты и времени, где дата должна содержать как минимум год, а время (разделенное T) является необязательным. Часть дробной секунды имеет разрешение в наносекунды. Примеры: yyyy-MM-dd'T'HH:mm:ss.SSSSSSZ или yyyy-MM-dd.
basic_date
Базовый форматтер для полной даты в формате: год (четыре цифры), месяц (две цифры) и день (две цифры): yyyyMMdd.
basic_date_time
Базовый форматтер, объединяющий базовую дату и время, разделённые T: yyyyMMdd'T'HHmmss.SSSZ.
basic_date_time_no_millis
Базовый форматтер, объединяющий базовую дату и время без миллисекунд, разделённые T: yyyyMMdd'T'HHmmssZ.
basic_ordinal_date
Форматтер для полной порядковой даты, использующей четырёхзначный год и трёхзначный день года: yyyyDDD.
basic_ordinal_date_time
Форматтер для полной порядковой даты и времени, использующей четырёхзначный год и трёхзначный день года: yyyyDDD'T'HHmmss.SSSZ.
basic_ordinal_date_time_no_millis
Форматтер для полной порядковой даты и времени без миллисекунд, использующей четырёхзначный год и трёхзначный день года: yyyyDDD'T'HHmmssZ.
basic_time
Базовый форматтер для двухзначных часов, двухзначных минут, двухзначных секунд, трёхзначных миллисекунд и смещения часового пояса: HHmmss.SSSZ.
basic_time_no_millis
Базовый форматтер для двухзначных часов, двухзначных минут, двухзначных секунд и смещения часового пояса: HHmmssZ.
basic_t_time
Базовый форматтер для двухзначных часов, двухзначных минут, двухзначных секунд, трёхзначных миллисекунд и смещения часового пояса, предваряемого T: 'T'HHmmss.SSSZ.
basic_t_time_no_millis
Базовый форматтер для двухзначных часов, двухзначных минут, двухзначных секунд и смещения часового пояса, предваряемого T: 'T'HHmmssZ.
basic_week_date или strict_basic_week_date
Базовый форматтер для полной даты в формате: год (четырехзначный), неделя (двухзначный) и день недели (однозначный): xxxx'W'wwe.
basic_week_date_time или strict_basic_week_date_time
Базовый форматтер, объединяющий дату и время по неделе, разделённые T: xxxx'W'wwe'T'HHmmss.SSSZ.
basic_week_date_time_no_millis или strict_basic_week_date_time_no_millis
Базовый форматтер, объединяющий дату и время по неделе без миллисекунд, разделённые T: xxxx'W'wwe'T'HHmmssZ.
date или strict_date
Форматтер для полной даты в формате: год (четыре цифры), месяц (две цифры) и день (две цифры): yyyy-MM-dd.
date_hour или strict_date_hour
Форматтер, объединяющий полную дату и двухзначные часы: yyyy-MM-dd'T'HH.
date_hour_minute или strict_date_hour_minute
Форматтер, объединяющий полную дату, двухзначные часы и двухзначные минуты: yyyy-MM-dd'T'HH:mm.
date_hour_minute_second или strict_date_hour_minute_second
Форматтер, объединяющий полную дату, двухзначные часы, двухзначные минуты и двухзначные секунды: yyyy-MM-dd'T'HH:mm:ss.
date_hour_minute_second_fraction или strict_date_hour_minute_second_fraction
Форматтер, объединяющий полную дату, двухзначные часы, двухзначные минуты, двухзначные секунды и трёхзначную дробную часть секунды: yyyy-MM-dd'T'HH:mm:ss.SSS.
date_hour_minute_second_millis или strict_date_hour_minute_second_millis
Форматтер, объединяющий полную дату, двухзначные часы, двухзначные минуты, двухзначные секунды и трёхзначную дробную часть секунды: yyyy-MM-dd'T'HH:mm:ss.SSS.
date_time или strict_date_time
Форматтер, объединяющий полную дату и время, разделённые T: yyyy-MM-dd'T'HH:mm:ss.SSSZ.
date_time_no_millis или strict_date_time_no_millis
Форматтер, объединяющий полную дату и время без миллисекунд, разделённые T: yyyy-MM-dd'T'HH:mm:ssZ.
hour или strict_hour
Форматтер для двухзначных часов: HH
hour_minute или strict_hour_minute
Форматтер для двухзначных часов и двухзначных минут: HH:mm.
hour_minute_second или strict_hour_minute_second
Форматтер для двухзначных часов, двухзначных минут и двухзначных секунд: HH:mm:ss.
hour_minute_second_fraction или strict_hour_minute_second_fraction
Форматтер для двухзначных часов, двухзначных минут, двухзначных секунд и трёхзначной дробной части секунды: HH:mm:ss.SSS.
hour_minute_second_millis или strict_hour_minute_second_millis
Форматтер для двухзначных часов, двухзначных минут, двухзначных секунд и трёхзначной дробной части секунды: HH:mm:ss.SSS.
ordinal_date или strict_ordinal_date
Форматтер для полной порядковой даты, использующей четырёхзначный год и трёхзначный день года: yyyy-DDD.
ordinal_date_time или strict_ordinal_date_time
Форматтер для полной порядковой даты и времени, использующей четырёхзначный год и трёхзначный день года: yyyy-DDD'T'HH:mm:ss.SSSZ.
ordinal_date_time_no_millis или strict_ordinal_date_time_no_millis
Форматтер для полной порядковой даты и времени без миллисекунд, использующей четырёхзначный год и трёхзначный день года: yyyy-DDD'T'HH:mm:ssZ.
time или strict_time
Форматтер для двухзначных часов, двухзначных минут, двухзначных секунд, трёхзначной дробной части секунды и смещения часового пояса: HH:mm:ss.SSSZ.
time_no_millis или strict_time_no_millis
Форматтер для двухзначных часов, двухзначных минут, двухзначных секунд и смещения часового пояса: HH:mm:ssZ.
t_time или strict_t_time
Форматтер для двухзначных часов, двухзначных минут, двухзначных секунд, трёхзначной дробной части секунды и смещения часового пояса, предваряемого T: 'T'HH:mm:ss.SSSZ.
t_time_no_millis или strict_t_time_no_millis
Форматтер для двухзначных часов, двухзначных минут, двухзначных секунд и смещения часового пояса, предваряемого T: 'T'HH:mm:ssZ.
week_date или strict_week_date
Форматтер для полной даты в формате: год (четырехзначный), неделя (двухзначный) и день недели (однозначный): YYYY-'W'ww-e. Используется определение ISO для даты недели.
week_date_time или strict_week_date_time
Форматтер, объединяющий дату и время по неделе, разделённые T: YYYY-'W'ww-e'T'HH:mm:ss.SSSZ. Используется определение ISO для даты недели.
week_date_time_no_millis или strict_week_date_time_no_millis
Форматтер, объединяющий дату и время по неделе без миллисекунд, разделённые T: YYYY-'W'ww-e'T'HH:mm:ssZ. Используется определение ISO для даты недели.
weekyear или strict_weekyear
Форматтер для четырёхзначного года: YYYY. Используется определение ISO для даты недели.
weekyear_week или strict_weekyear_week
Форматтер для четырёхзначного года и двухзначной недели: YYYY-'W'ww. Используется определение ISO для даты недели.
weekyear_week_day или strict_weekyear_week_day
Форматтер для четырёхзначного года, двухзначной недели и однозначного дня недели: YYYY-'W'ww-e. Используется определение ISO для даты недели.
year или strict_year
Форматтер для четырёхзначного года: yyyy.
year_month или strict_year_month
Форматтер для четырёхзначного года и двухзначного месяца: yyyy-MM.
year_month_day или strict_year_month_day
Форматтер для четырёхзначного года, двухзначного месяца и двухзначного дня: yyyy-MM-dd.

© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/8.17/mapping-date-format.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API