формат
В 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