Для чего Elasticsearch обычно используют в backend-системах?
- Зачем Elasticsearch, если есть база данных?
- Как синхронизировать Elasticsearch с базой?
Для полнотекстового поиска (морфология, опечатки, релевантность), фасетов и фильтров по многим полям, поиска по логам и аналитики. Обычно это модель чтения рядом с основной базой, а не источник истины.
- Инвертированный индекс: слово → документы
- Синхронизация из базы: события, CDC (Debezium), периодическая переиндексация
- Индексация с задержкой (refresh ~1 с) — согласованность в конечном счёте
А ещё Транзакций и JOIN нет; данные денормализуют в документ
Подробно
Что умеет хорошо:
- полнотекстовый поиск с анализом текста: морфология (русские словоформы), синонимы, исправление опечаток, ранжирование по релевантности (BM25);
- фильтры и фасеты по многим полям одновременно («ноутбуки, 16 ГБ, до 100 000 ₽, в наличии») с подсчётом количества по каждому значению;
- агрегаты и аналитика по большим объёмам, поиск по логам (ELK/OpenSearch);
- горизонтальное масштабирование шардами и репликами.
Как устроен: инвертированный индекс — для каждого термина список документов, где он встречается. Документ при индексации разбивается анализатором на термины.
Почему не источник истины: нет транзакций между документами, нет JOIN, возможны потери при некоторых сбоях, индексация асинхронна (документ появляется в поиске после refresh, по умолчанию ~1 с). Поэтому основная запись — в базу, а поиск — модель чтения.
Синхронизация: событие об изменении → консьюмер обновляет документ; CDC из журнала базы (Debezium → Kafka → Elasticsearch); полная переиндексация в новый индекс с переключением алиаса. Документ денормализован: товар вместе с названием категории и брендом.
Что хотят услышать
- Сценарии: полнотекст, фасеты, логи.
- Инвертированный индекс.
- Роль модели чтения и почему не источник истины.
- Способы синхронизации и задержка индексации.
Частые ошибки
- Хранить в Elasticsearch единственную копию данных.
- Ожидать, что документ найдётся сразу после записи.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Как основной источник истины для заказов и платежей вместо реляционной БД
- ✗Для замены foreign keys в PostgreSQL
- ✗Для компиляции SQL-запросов
- ✓Для полнотекстового поиска, фильтрации и аналитики по документам
Что спросят дальше
- Что такое inverted index?
- Как синхронизировать БД и Elasticsearch?
Разбор темы
- Полнотекстовый поиск (Elasticsearch)
Почему LIKE не поиск, инвертированный индекс, анализаторы, релевантность BM25, query vs filter context и поиск как read model.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.