Mappings
Тема дорожной карты · Elasticsearch
Маппинги в Elasticsearch определяют схему индекса: тип данных каждого поля, способ анализа текстовых полей и то, какие поля индексируются или хранятся. Каждый индекс Elasticsearch имеет маппинг, который может быть задан явно перед вставкой данных (явный маппинг через PUT /<index>/_mapping) или автоматически выведен Elasticsearch при первом индексировании документа с новым полем (динамический маппинг). Маппинг содержит определения полей под ключом properties, где каждому полю присваивается type — например, text, keyword, integer, date или nested, — а также тип-специфичные параметры конфигурации: analyzer, format или doc_values. Маппинги в Elasticsearch в основном неизменяемы для существующих полей: после маппинга поля его тип нельзя изменить без переиндексирования данных через Reindex API, поскольку изменение типа потребует перезаписи инвертированного индекса для этого поля. Анализ и настройка маппингов перед выходом в продуктивную среду — например, отключение _source для индексов с интенсивной записью только сводных данных или установка index: false для полей, используемых только при извлечении _source, — является ключевой практикой оптимизации производительности Elasticsearch.
Как это работает
Mappings определяют типы полей + как они индексируются/анализируются. Dynamic mapping auto-detect-ит типы из первого документа — удобно, но опасно (строка "12345" становится long, потом ломается при реальной строке). Explicit mapping — то что вам нужно в prod. Типы полей: text (analysed, searchable, не aggregatable), keyword (exact, aggregatable, sortable), long/double, date, boolean, nested, geo_point. Analyzers обрабатывают текст: tokenize → filter (lowercase, stop words, stemming). Распространённые: standard, english, custom analyzers per язык.
Когда применять
Всегда explicit mapping в production — dynamic mapping делает один плохой doc отравлением индекса. Subfields: text поле с .keyword для search + aggregation. Analyzers per язык (russian analyzer для русского). Отключайте _source только с большой осторожностью — теряете возможность reindex.
Типичные ошибки
Ловушки Mappings: dynamic mapping (первый weird doc ломает schema); только text — нельзя aggregate, нельзя сортировать; неправильный analyzer (English на русском → нет stemming, плохие результаты); слишком много полей ("field explosion" — > 1000 полей упирается в лимиты).
Связанные понятия
Полезные ресурсы
Проверить знания (1)
Загрузка вопросов…