Типы полей
Тема дорожной карты · Elasticsearch
Типы полей в Elasticsearch определяют, как значение поля индексируется, хранится и по нему ищется; выбор правильного типа для каждого поля маппинга — одно из важнейших решений при проектировании индекса Elasticsearch. Наиболее часто используемые типы полей: text (анализируемые строки для поиска по тексту), keyword (строки с точным значением для фильтрации, сортировки и агрегаций terms), long, integer, double, float (числовые значения), date (временные метки и строки дат), boolean, geo_point (координаты широты/долготы), а также object и nested (для структурированных полей и массивов объектов). Поле text обрабатывается анализатором во время индексирования и не подходит для агрегаций или точной фильтрации, тогда как поле keyword хранится дословно и идеально для фасетного поиска и сортировки. Мультиполя позволяют индексировать одно значение сразу под несколькими типами — например, хранить название продукта как text для полнотекстового поиска и как keyword для сортировки, — не дублируя исходный документ. Выбор типа поля напрямую влияет на возможности Query DSL: запросы range работают с числовыми типами и датами, match — с полями text, а term лучше всего работает с полями keyword.
Как это работает
Типы полей определяют типы полей + как они индексируются/анализируются. 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.
Типичные ошибки
Ловушки Типы полей: dynamic mapping (первый weird doc ломает schema); только text — нельзя aggregate, нельзя сортировать; неправильный analyzer (English на русском → нет stemming, плохие результаты); слишком много полей ("field explosion" — > 1000 полей упирается в лимиты).
Связанные понятия
Полезные ресурсы
Проверить знания (1)
Загрузка вопросов…