Как устроен инвертированный индекс и почему он быстрее LIKE '%слово%'?
- Как работает полнотекстовый поиск?
Инвертированный индекс — не «документ → слова», а «слово → документы». Поиск слова — прочитать готовый список документов, а не перебирать тексты.
- При индексации текст разбивается анализатором на термины
- Списки отсортированы — пересечение для нескольких слов быстрое
- Ранжирование по частоте термина и редкости (BM25)
А ещё LIKE '%слово%' читает всю таблицу и не понимает словоформ
Подробно
Запрос с ведущим шаблоном заставляет базу просмотреть каждую строку и каждый её символ — стоимость линейна по объёму текста. Инвертированный индекс переносит эту работу на этап индексации: текст один раз разбирается на термины, и для каждого термина хранится список документов с позициями. Поиск нескольких слов превращается в пересечение готовых списков, что очень быстро. Плата — индекс нужно строить и хранить, а результат виден не мгновенно: изменения становятся доступны для поиска после обновления индекса, то есть согласованность здесь в конечном счёте.
Что хотят услышать
- Устройство инвертированного индекса.
- Почему быстрее LIKE.
- Анализ текста и ранжирование.
Частые ошибки
- Ожидать, что документ станет доступен для поиска сразу после записи.
- Строить полнотекстовый поиск на LIKE, когда объём вырос.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Он сжимает тексты, и сканирование идёт быстрее
- ✗Он кэширует результаты ранее выполненных запросов
- ✗Хранит тексты по алфавиту, и поиск идёт бинарным делением по документам
- ✓Хранит «термин → список документов», и поиск читает готовый список, а не все тексты
Что спросят дальше
- Что происходит с текстом на этапе анализа?
- Почему поисковый индекс не делают источником истины?
Разбор темы
- Полнотекстовый поиск (Elasticsearch)
Почему LIKE не поиск, инвертированный индекс, анализаторы, релевантность BM25, query vs filter context и поиск как read model.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.