Оглавление курса

Документы, индексы и API

Освоим адресацию документов и чтение поискового ответа. Индекс — это коллекция с общей схемой, а не аналог отдельного SQL-индекса.

Разделов: 4Elasticsearch 9.4.3Ещё не прочитан

Чему вы научитесь

  • Документ как единица поиска
  • HTTP-контракт
  • Чтение hits

Освоим адресацию документов и чтение поискового ответа. Индекс — это коллекция с общей схемой, а не аналог отдельного SQL-индекса.

Примеры course-products используют учебную схему и товар из главы 5 «Mapping и типы полей». Разборы упражнений ниже используют отдельный публичный набор тренажёра.

Логика главы
  • Документ как единица поиска
  • HTTP-контракт
  • Чтение hits

Освоим адресацию документов и чтение поискового ответа. Индекс — это коллекция с общей схемой, а не аналог отдельного SQL-индекса.

Курс ориентирован на Elasticsearch 9.4.3. Разборы упражнений используют публичный набор products; остальные запросы показывают отдельные учебные индексы и могут требовать подготовки или прав, недоступных в тренажёре. Ответы сокращены, score может меняться. Для расширенных функций проверяйте лицензию и вариант развёртывания.

01 / 04

Документ как единица поиска

Документ содержит JSON-поля, а индекс задаёт правила их интерпретации. _id уникален внутри индекса; одинаковые _id в разных индексах допустимы. _source хранит исходное представление документа и не является самим поисковым индексом. Для каталога удобно выбирать стабильный идентификатор товара: повторная доставка события тогда обновляет ту же сущность, а не создаёт дубликат.

Самопроверка
02 / 04

HTTP-контракт

GET /products/_doc/sku-1 читает документ по идентификатору, а POST /products/_search выполняет поиск. PUT с известным _id индексирует новое представление документа; обновление через _update использует отдельный контракт. Статус HTTP сообщает об исходе запроса, но пакетный API может вернуть HTTP 200 с ошибками отдельных операций. Всегда читайте тело ответа.

Самопроверка
03 / 04

Чтение hits

hits.hits содержит текущую страницу, hits.total — сведения о количестве совпадений. relation=eq означает точное число, gte — нижнюю границу. took измеряет серверную работу поиска и не включает всю сетевую задержку пользователя. _shards и timed_out помогают заметить неполное выполнение: HTTP 200 сам по себе не доказывает полноту выдачи.

Ответ чтения одного документа не имеет обёртки hits.

GET /course-products/_doc/sku-1
Ответ Elasticsearch
Сокращённый ответ · JSON
{
  "_index": "course-products",
  "_id": "sku-1",
  "found": true,
  "_source": {
    "name": "Running headphones",
    "price": 99
  }
}

Как читать результат

Ответ чтения одного документа не имеет обёртки hits.

Самопроверка
04 / 04

Разбор на примере каталога

Пусть запрос вернул size=10, массив из 10 товаров и total={value:10000, relation:"gte"}. Это не доказывает, что найдено ровно 10 000 товаров: число является нижней границей. Для интерфейса можно показывать «10 000+», а для точного подсчёта осознанно включить track_total_hits=true с учётом затрат. Если один shard завершился ошибкой, частичный ответ может выглядеть правдоподобно. Продукт должен решить, разрешена ли неполная выдача, и проверять этот контракт независимо от кода HTTP.

Самопроверка

Самопроверка

Сначала ответьте самостоятельно, затем раскройте объяснение.

1. Где уникален _id?

Внутри одного индекса.

2. Что хранит _source?

Представление документа для возврата и ряда операций, а не инвертированный индекс.

3. Почему hits.hits короче hits.total?

Первое — страница, второе — количество совпадений или его нижняя граница.

4. Что означает gte?

Фактическое количество не меньше указанного значения.

5. Достаточно ли HTTP 200?

Нет: проверьте timed_out, ошибки шардов и результаты отдельных bulk-операций.

Краткая памятка

  • Внутри одного индекса.
  • Представление документа для возврата и ряда операций, а не инвертированный индекс.
  • Первое — страница, второе — количество совпадений или его нижняя граница.
  • Фактическое количество не меньше указанного значения.
  • Нет: проверьте timed_out, ошибки шардов и результаты отдельных bulk-операций.

Официальная документация

Готовы применить знания?

Подтвердите прочтение, чтобы сохранить своё место. Чтение и решение заданий учитываются отдельно в этом браузере с помощью гостевой cookie.