Раздел 40 · Elasticsearch и ELK

Документы, индексы и маппинг

junior~15 мин

без входаВойди, чтобы отмечать прогресс, вести заметки и решать задачи в редакторе. войти

Инвертированный индекс строится по словам из текста. Но в карточке блюда не только текст: есть цена, рейтинг, теги, дата добавления, признак «в наличии». По цене не ищут слова, по ней сравнивают и сортируют. Elasticsearch должен знать, какое поле что хранит. В этом уроке разберёмся, из чего состоит индекс и как описать его поля.

Документ и индекс

Данные в Elasticsearch хранятся документами: это объекты JSON. Блюдо «Гонца» выглядит так:

{
  "name": "Пицца Маргарита",
  "price_rub": 489,
  "rating": 4.7,
  "available": true,
  "added_on": "2026-06-30",
  "tags": ["hit", "vegetarian"]
}

Документы одного рода живут в одном индексе: блюда в dishes, рестораны в restaurants, отзывы в reviews. Если сравнивать с базой данных, индекс похож на таблицу, а документ на строку. Только строки таблицы жёстко следуют схеме, а документ JSON может содержать вложенные объекты и массивы.

У каждого документа есть _id, уникальный внутри индекса. А сам JSON хранится в поле _source: его Elasticsearch возвращает в ответе на поиск.

Маппинг

Маппинг это схема индекса: какие поля есть и какого они типа. От типа зависит, как поле хранится и что с ним можно делать.

Главные типы:

ТипЧто хранитЧто с ним делают
textтекст для поиска: названия, описанияразбирается анализатором на термины, ищется по словам
keywordточное значение: тег, кухня, статусищется целиком, по нему группируют и сортируют
integer, long, float, doubleчисласравнения, диапазоны, суммы, сортировка
dateдата и времядиапазоны, гистограммы по времени
booleanда или нетфильтры
object, nestedвложенный объектпоиск по полям внутри
geo_pointкоординатыпоиск рядом, карта

Самое важное различие в этой таблице: text против keyword. Название блюда «Пицца с грибами» нужно находить по слову «грибы»: это text. Кухню «Итальянская» нужно точно отфильтровать и посчитать, сколько блюд в каждой: это keyword. Подробно об этом в уроке про match и term.

урок из курса

Урок из курса «Elasticsearch и ELK». Курс покупается один раз и остаётся навсегда: 500 ₽.

Оплата пока не подключена: премиум и курсы открываются промокодом.