Какие поисковые движки использовались, например Elastic
Что проверяют
Работали ли вы с поиском руками или только слышали название. Интервьюеру важно, понимаете ли вы, чем поисковый движок отличается от базы и как в него попадают данные. Следом обычно спрашивают, как вы синхронизировали индекс с основной базой и что делали при смене маппинга.
Как отвечать
Говорите о своём опыте, а не перечисляйте всё известное. Если работали с Elasticsearch, покажите понимание основ:
- инвертированный индекс: для каждого слова хранится список документов, поэтому полнотекстовый поиск быстрый, ранжирование по умолчанию идёт по BM25;
- маппинг и анализаторы: поле
textпроходит через анализатор (токенизация, стемминг, для русского анализаторrussian), полеkeywordхранится как есть и годится для фильтров, сортировки и агрегаций; - клиент в .NET: для Elasticsearch 8.x официальный
Elastic.Clients.Elasticsearch, NEST остался для 7.x, для OpenSearch свойOpenSearch.Client; - синхронизация: база остаётся источником правды, в индекс данные идут через outbox и фоновый обработчик или через CDC. Переиндексация без простоя: новый индекс и переключение алиаса;
- пагинация:
fromиsizeпо умолчанию ограничены 10 000 документов, для глубокой прокрутки нуженsearch_after.
Назовите альтернативы и когда они уместнее: полнотекстовый поиск PostgreSQL (tsvector и GIN-индекс) закрывает простые сценарии без новой инфраструктуры, Meilisearch и Typesense проще запустить для поиска по каталогу, OpenSearch это открытый форк Elasticsearch.
Если опыта с движками не было, скажите честно и расскажите, как делали поиск в базе и где упёрлись в её пределы.
Где спотыкаются
Используют Elasticsearch как основное хранилище. Он не транзакционный, а новые документы видны не сразу, по умолчанию после refresh раз в секунду.
Не могут объяснить разницу между text и keyword, а потом удивляются, что сортировка по названию не работает.
Приписывают себе опыт со всеми движками из списка. Первый же вопрос о шардах или анализаторах такой ответ разрушает.