Тип поля Date
В формате JSON нет типа данных «дата», поэтому даты в Elasticsearch могут быть представлены:
- строками, содержащими отформатированные даты, например
"2015-01-01"или"2015/01/01 12:10:30". - числом, представляющим количество миллисекунд с начала эпохи.
- числом, представляющим количество секунд с начала эпохи (настройки).
Значения для миллисекунд с начала эпохи должны быть неотрицательными. Для представления дат до 1970 года используйте отформатированную дату.
Внутренне даты преобразуются в UTC (если указана временная зона) и хранятся как целое число, представляющее количество миллисекунд с начала эпохи.
Запросы к датам внутренне преобразуются в запросы по диапазону на основе этого целочисленного представления, а результаты агрегаций и сохранённых полей преобразуются обратно в строку в зависимости от формата даты, связанного с полем.
Даты всегда будут отображаться как строки, даже если изначально они были предоставлены как целые числа в документе JSON.
Форматы дат можно настроить, но если format не указан, используется значение по умолчанию:
"strict_date_optional_time||epoch_millis"
Это означает, что он будет принимать даты с необязательными временными метками, которые соответствуют форматам, поддерживаемым strict_date_optional_time или миллисекундам с начала эпохи.
Например:
PUT my-index-000001
{
"mappings": {
"properties": {
"date": {
"type": "date"
}
}
}
}
PUT my-index-000001/_doc/1
{ "date": "2015-01-01" }
PUT my-index-000001/_doc/2
{ "date": "2015-01-01T12:10:30Z" }
PUT my-index-000001/_doc/3
{ "date": 1420070400001 }
GET my-index-000001/_search
{
"sort": { "date": "asc"}
} | Поле | |
| Этот документ содержит обычную дату. | |
| В этом документе указано время. | |
| В этом документе используется значение миллисекунд с начала эпохи. | |
| Обратите внимание, что все возвращаемые значения |
Даты могут принимать числа с десятичной точкой, например {"date": 1618249875.123456}, но в некоторых случаях (#70085) точность этих дат будет утеряна, поэтому следует избегать их использования.
Несколько форматов дат
Несколько форматов можно указать, разделив их ||. Каждый формат будет последовательно проверяться до тех пор, пока не будет найден соответствующий формат. Первый формат будет использоваться для преобразования значения миллисекунд с начала эпохи обратно в строку.
PUT my-index-000001
{
"mappings": {
"properties": {
"date": {
"type": "date",
"format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
}
}
}
} Параметры для полей date
Следующие параметры принимаются полями date:
| Усиление запросов по полю на этапе обработки. Принимает число с плавающей точкой, по умолчанию | |
| Необходимо ли хранить поле на диске в формате столбцов, чтобы его можно было использовать для сортировки, агрегаций или сценариев? Принимает | |
| Формат(ы) даты, которые могут быть обработаны. По умолчанию | |
| | Язык для обработки дат, поскольку названия и/или аббревиатуры месяцев могут отличаться в разных языках. По умолчанию используется |
| Если | |
| Должно ли поле быть доступно для поиска? Принимает | |
| Принимает значение даты в одном из настроенных | |
| | Определяет, что делать, если сценарий, определённый параметром |
| | Если этот параметр установлен, поле будет индексировать значения, сгенерированные этим сценарием, а не считывать значения напрямую из исходного источника. Если для этого поля задано значение в документе-входе, документ будет отклонен с ошибкой. Сценарии имеют тот же формат, что и их аналогичные сценарии runtime, и должны генерировать целые числа, представляющие отметки времени. |
| Следует ли хранить значение поля отдельно от поля | |
| Метаданные о поле. |
Секунды эпохи
Если вам нужно отправлять даты как количество секунд с начала эпохи, убедитесь, что format содержит epoch_second:
PUT my-index-000001
{
"mappings": {
"properties": {
"date": {
"type": "date",
"format": "strict_date_optional_time||epoch_second"
}
}
}
}
PUT my-index-000001/_doc/example?refresh
{ "date": 1618321898 }
POST my-index-000001/_search
{
"fields": [ {"field": "date"}],
"_source": false
} Это вернёт дату, подобную:
{
"hits": {
"hits": [
{
"_id": "example",
"_index": "my-index-000001",
"_type": "_doc",
"_score": 1.0,
"fields": {
"date": ["2021-04-13T13:51:38.000Z"]
}
}
]
}
}
© 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/7.17/date.html