Получить доступ

Что верно про использование поисковой системы в архитектуре backend-сервиса?

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

Поисковый индекс — производная модель чтения с согласованностью в конечном счёте: источник истины — база, индекс наполняется событиями или CDC.

  • Query — с оценкой релевантности; filter — без оценки, кэшируется и быстрее
  • Переиндексация — в новый индекс с переключением алиаса
  • Документ денормализован под поиск

А ещё Задержка индексации ~1 с — интерфейс не должен ждать мгновенного появления

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Держать поисковую систему источником истины опасно: у неё нет транзакций и ограничений целостности, а при сбое или смене схемы индекс переиндексируют — что возможно, только если данные лежат где-то ещё. Поэтому стандартная схема такая: основная база хранит данные, а индекс наполняется событиями или через захват изменений. Разделение контекстов даёт практический выигрыш: условия, отвечающие на вопрос «да или нет» (диапазон дат, статус, категория), помещают в filter, где не считается оценка и результат кэшируется, а собственно текстовый поиск оставляют в query. И обязательно закладывайте задержку появления документа в поиске в пользовательский сценарий.

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

  • Роль модели чтения и итоговая согласованность.
  • Разница query и filter.
  • Переиндексация без простоя.

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

  • Делать поисковый индекс единственным местом хранения данных.
  • Класть все условия в query context и терять кэширование фильтров.

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

Несколько верных вариантов. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Её держат моделью чтения, а источником истины оставляют основную базу — поисковый индекс можно перестроить
  • ✓Filter context не влияет на релевантность и потому кэшируется, а query context вычисляет оценку соответствия
  • ✓Обновление становится видимым для поиска не мгновенно — согласованность здесь в конечном счёте
  • ✗Она обеспечивает такие же транзакционные гарантии, как реляционная СУБД

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

  • Как обычно наполняют поисковый индекс из основной базы?
  • Что делать, если пользователю нужно сразу увидеть только что созданный документ?

Разбор темы

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

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем