Динамическое отображение полей
Когда Elasticsearch обнаруживает новое поле в документе, оно динамически добавляет это поле в отображение типа по умолчанию. Параметр dynamic контролирует это поведение.
Вы можете явно указать Elasticsearch на динамическое создание полей на основе поступающих документов, установив параметр dynamic в значение true или runtime. При включенном динамическом отображении полей Elasticsearch использует правила в следующей таблице для определения способа отображения типов данных каждого поля.
Типы данных полей в следующей таблице — это единственные типы данных полей, которые Elasticsearch обнаруживает динамически. Все остальные типы данных необходимо отображать явно.
Тип данных Elasticsearch | ||
Тип данных JSON |
|
|
| Поле не добавлено | Поле не добавлено |
|
|
|
|
|
|
|
|
|
|
| Поле не добавлено |
| Зависит от первого не- | Зависит от первого не- |
|
|
|
|
|
|
|
|
|
Вы можете отключить динамическое отображение, как на уровне документа, так и на уровне object. Установка параметра dynamic в значение false игнорирует новые поля, а strict отклоняет документ, если Elasticsearch сталкивается с неизвестным полем.
Используйте API обновления отображения, чтобы обновить настройку dynamic для существующих полей.
Вы можете настроить правила динамического отображения полей для детектирования дат и детектирования чисел. Для определения пользовательских правил отображения, которые вы можете применить к дополнительным динамическим полям, используйте dynamic_templates.
Детектирование дат
Если date_detection включено (по умолчанию), то новые строковые поля проверяются на соответствие любому из шаблонов дат, указанных в dynamic_date_formats. Если совпадение найдено, добавляется новое поле date с соответствующим форматом.
Значение по умолчанию для dynamic_date_formats:
[ "strict_date_optional_time","yyyy/MM/dd HH:mm:ss Z||yyyy/MM/dd Z"]
Например:
PUT my-index-000001/_doc/1
{
"create_date": "2015/09/02"
}
GET my-index-000001/_mapping Отключение детектирования дат
Динамическое детектирование дат можно отключить, установив date_detection в значение false:
PUT my-index-000001
{
"mappings": {
"date_detection": false
}
}
PUT my-index-000001/_doc/1
{
"create_date": "2015/09/02"
} | Поле |
Настройка форматов дат
Альтернативно, dynamic_date_formats можно настроить для поддержки собственных форматов дат:
PUT my-index-000001
{
"mappings": {
"dynamic_date_formats": ["MM/dd/yyyy"]
}
}
PUT my-index-000001/_doc/1
{
"create_date": "09/25/2015"
} Детектирование чисел
Хотя JSON поддерживает собственные типы данных для чисел с плавающей точкой и целых чисел, некоторые приложения или языки иногда могут отображать числа в виде строк. Обычно правильным решением является явное отображение этих полей, но детектирование чисел (которое отключено по умолчанию) можно включить для автоматизации этого процесса:
PUT my-index-000001
{
"mappings": {
"numeric_detection": true
}
}
PUT my-index-000001/_doc/1
{
"my_float": "1.0",
"my_integer": "1"
}
© 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/dynamic-field-mapping.html