Документы, индексы и маппинг
Разбираем базовые сущности Elasticsearch: документ как единицу данных, индекс как коллекцию и маппинг как схему полей.
Документ — это объект JSON, единица данных в Elasticsearch; индекс — именованная коллекция похожих документов.
Документ
В Elasticsearch вы храните не строки таблицы, а документы — обычные JSON-объекты. Один товар, одна статья, одна запись лога — это документ. У каждого документа есть уникальный _id (вы задаёте сами или ES сгенерирует) и поля со значениями.
{
"title": "Кофемашина DeLonghi",
"price": 24990,
"in_stock": true,
"tags": ["кухня", "кофе"]
}Индекс
Документы одного вида складывают в индекс. Индекс — это примерно как таблица в SQL: «products», «articles», «logs-2026-06». Поиск, индексация и настройки задаются на уровне индекса. У индекса есть имя (строчными буквами), настройки (число шардов и реплик) и маппинг.
Маппинг — схема полей
Маппинг (mapping) описывает, какие поля есть в индексе и какого они типа. Тип определяет, как поле хранится, индексируется и ищется. Основные типы:
| Тип | Для чего |
text | текст для полнотекстового поиска (анализируется, разбивается на слова) |
keyword | точные строки: статусы, теги, email (не анализируется, ищется целиком) |
integer, long, float | числа (для диапазонов, сортировки, агрегаций) |
date | дата и время |
boolean | true/false |
Маппинг можно задать явно при создании индекса, а можно положиться на динамический маппинг: ES сам угадает тип по первому документу. Для прода почти всегда задают явно — об этом отдельный урок.
А где «типы документов»?
Если вы читаете старые статьи, там упоминается третий уровень — type (индекс → тип → документ). В ранних версиях в одном индексе могли жить документы разных «типов». Начиная с Elasticsearch 7 это убрали: остались только индексы и документы. Если встретите в коде _doc в URL — это рудимент того механизма. Запомните: один индекс — один вид документов.
Как работает под капотом
Когда вы кладёте документ в индекс, ES для каждого текстового поля прогоняет значение через анализатор, получает термы и дописывает их в инвертированный индекс этого поля. Числовые поля и поля keyword индексируются иначе — в структурах для диапазонов и точных совпадений. Поэтому от типа поля напрямую зависит, как по нему можно искать: по text работает полнотекстовый match, по keyword — точный term, по числу — диапазоны и сортировка.
Частые ошибки
- Полагаться на динамический маппинг в проде. ES может угадать строку как
text, когда вам нуженkeywordдля точной фильтрации, и наоборот. - Менять тип уже существующего поля. Так нельзя: тип поля в маппинге неизменяем. Нужно создать новый индекс с правильным маппингом и переиндексировать данные (reindex).
Итоги
- Документ — это JSON-объект; индекс — коллекция однотипных документов (аналог таблицы).
- Маппинг описывает поля и их типы; от типа зависит, как поле ищется.
- «Типы документов» (type) убрали в ES 7 — остались только индексы и документы.