Что такое Mapping
Elasticsearch индексирует любой документ, не зная о его полях. Однако за кулисами Elasticsearch назначает типы данных вашим полям в сопоставлении (Mapping). Mapping - это определение схемы, которое содержит имена и типы данных полей индекса. Он также содержит информацию о том, как поля должны индексироваться и храниться в Lucene
. Mapping сопоставляют ваши сложные документы JSON
с простыми плоскими документами, которые ожидает Lucene
.
Если вы хотите проверить сопоставление существующего индекса, вы можете использовать _mapping.
GET mylogs/_mapping
В результате вы получите список всех полей и их типов.
Типы полей
Тип | Описание |
---|---|
Text | Этот тип используется для хранения полнотекстовых строк. В частности, он используется для индексации текста, который вы хотите проанализировать |
Keyword | Этот тип используется для хранения строк точных значений. Обычно это используется для фильтрации, сортировки и агрегирования строк. Значения в полях ключевых слов будут попадать только в том случае, если они точно совпадают. |
date | Вы можете использовать тип date или date_nanos для сопоставления полей, содержащих строки, отформатированные как даты или числовые даты |
Integer | Вы можете хранить целые числа одного из следующих типов: byte, short, integer, long. Вы должны выбрать наименьший тип, которого будет достаточно для вашего случая использования. Это повысит производительность операций с индексами и запросами. |
Floating Point Number | Числа с плавающей запятой могут быть отображены в один из следующих типов: float, double, half_float или scaled_float. |
Boolean | Логические поля принимают значения JSON true и false |
IP | Этот тип можно использовать для хранения адресов IPv4 или IPv6 |
Hierarchical Types | Есть несколько иерархических типов, таких как nested, join, object |
Specialized | Вы можете использовать множество других типов данных, которые предназначены для конкретных случаев использования. Например, вы можете использовать geo_point и geo_shape, когда хотите проиндексировать географические данные |
Динамический Mapping (Dynamic Mapping)
Вы можете индексировать документы, не определяя сопоставления (mapping) заранее. Это связано с тем, что при индексировании документа по умолчанию Elasticsearch
динамически создает или обновляет сопоставление (mapping) по мере необходимости.
Когда вы индексируете первый документ, Elasticsearch
проверяет тип JSON
полей, чтобы определить их и сопоставить.
По типу JSON
поля Elasticsearch
угадывает связанный тип данных. Например, если вы индексируете целое число, Elasticsearch
создаст отображение типа long
для этого поля.
Dynamic Mapping не всегда будет оптимальным. Например некоторые поля с целыми числами могут быть сопоставлены как long
64-bits вместо возможных short
. Так что в случае если вы заранее знаете количество символов лучше сопоставлять тип самостоятельно.
Пример **сопоставления (mapping) **
PUT mylogs
{
"mappings": {
"properties": {
"my_fiels": {
"type": "short"
}
}
}
}
GET mylogs/_mapping
Изменение сопоставленного поля
После того как сопоставление было определено для данного поля, изменить его тип данных в невозможно. Причина, по которой вы не можете изменить сопоставление, заключается в том, что при переключении типа данных поля вы просите Lucene
изменить структуру данных, которую она использует для хранения всех значений в поле. Это означает, что все значения из документов, которые уже были проиндексированы, станут недоступными для поиска. Если вам нужно изменить тип данных поля, вам необходимо переиндексировать все ваши документы в новый индекс.
Тем не менее, вы всегда можете добавить новые поля без переиндексации.
Комментарии