Spec-Zone.ru › Elasticsearch 7
›Elasticsearch Guide [7.17] ›Mapping ›Типы данных полей

Тип поля 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 использует значение по умолчанию format.

Этот документ содержит обычную дату.

В этом документе указано время.

В этом документе используется значение миллисекунд с начала эпохи.

Обратите внимание, что все возвращаемые значения sort представлены в миллисекундах с начала эпохи.

Даты могут принимать числа с десятичной точкой, например {"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:

boost

Усиление запросов по полю на этапе обработки. Принимает число с плавающей точкой, по умолчанию 1.0.

doc_values

Необходимо ли хранить поле на диске в формате столбцов, чтобы его можно было использовать для сортировки, агрегаций или сценариев? Принимает true (по умолчанию) или false.

format

Формат(ы) даты, которые могут быть обработаны. По умолчанию strict_date_optional_time||epoch_millis.

locale

Язык для обработки дат, поскольку названия и/или аббревиатуры месяцев могут отличаться в разных языках. По умолчанию используется ROOT язык.

ignore_malformed

Если true, некорректные числа игнорируются. Если false (по умолчанию), некорректные числа вызывают исключение и отклоняют весь документ. Обратите внимание, что это нельзя установить, если используется параметр script.

index

Должно ли поле быть доступно для поиска? Принимает true (по умолчанию) и false.

null_value

Принимает значение даты в одном из настроенных format форматов в качестве поля, которое заменяет явные null значения. По умолчанию null, что означает, что поле считается отсутствующим. Обратите внимание, что это нельзя установить, если используется параметр script.

on_script_error

Определяет, что делать, если сценарий, определённый параметром script, выбрасывает ошибку во время индексирования. Принимает fail (по умолчанию), что приведет к отклонению всего документа, и continue, что зарегистрирует поле в метаданных документа _ignored и продолжит индексирование. Этот параметр можно задать только в том случае, если также задан параметр script.

script

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

store

Следует ли хранить значение поля отдельно от поля _source? Принимает true или false (по умолчанию).

meta

Метаданные о поле.

Секунды эпохи

Если вам нужно отправлять даты как количество секунд с начала эпохи, убедитесь, что 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

Spec-Zone.ru

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