Вопрос с собеседования · Базы данных

Как устроен инвертированный индекс и почему он быстрее LIKE '%слово%'?

MiddleПолнотекстовый поискElasticsearch
Ещё спрашивают так:
  • Как работает полнотекстовый поиск?
Коротко

Инвертированный индекс — не «документ → слова», а «слово → документы». Поиск слова — прочитать готовый список документов, а не перебирать тексты.

  • При индексации текст разбивается анализатором на термины
  • Списки отсортированы — пересечение для нескольких слов быстрое
  • Ранжирование по частоте термина и редкости (BM25)

А ещё LIKE '%слово%' читает всю таблицу и не понимает словоформ

Подробно

Запрос с ведущим шаблоном заставляет базу просмотреть каждую строку и каждый её символ — стоимость линейна по объёму текста. Инвертированный индекс переносит эту работу на этап индексации: текст один раз разбирается на термины, и для каждого термина хранится список документов с позициями. Поиск нескольких слов превращается в пересечение готовых списков, что очень быстро. Плата — индекс нужно строить и хранить, а результат виден не мгновенно: изменения становятся доступны для поиска после обновления индекса, то есть согласованность здесь в конечном счёте.

Что хотят услышать

  • Устройство инвертированного индекса.
  • Почему быстрее LIKE.
  • Анализ текста и ранжирование.

Частые ошибки

  • Ожидать, что документ станет доступен для поиска сразу после записи.
  • Строить полнотекстовый поиск на LIKE, когда объём вырос.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✗Он сжимает тексты, и сканирование идёт быстрее
  • ✗Он кэширует результаты ранее выполненных запросов
  • ✗Хранит тексты по алфавиту, и поиск идёт бинарным делением по документам
  • ✓Хранит «термин → список документов», и поиск читает готовый список, а не все тексты

Что спросят дальше

  • Что происходит с текстом на этапе анализа?
  • Почему поисковый индекс не делают источником истины?

Разбор темы

Связанные вопросы

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования