Для чего использовали Elasticsearch или Solr
Что проверяют
Есть ли за строчкой в резюме реальная задача и понимаете ли вы, что поисковый движок не ещё одна база данных. Следом спрашивают, как данные попадают в индекс и что происходит, когда основная база и индекс расходятся.
Как отвечать
Начните с задачи, ради которой взяли движок. Типичные сценарии:
- полнотекстовый поиск: морфология, синонимы, опечатки, ранжирование по релевантности. Для русского есть встроенный анализатор
russianсо стеммером; - автодополнение: поле
search_as_you_type, edge n-grams илиcompletion-подсказчик; - фасеты и фильтры: агрегации для каталога, счётчики по брендам и ценам рядом с выдачей;
- логи и аналитика: связка с Logstash и Kibana, где Elasticsearch хранит события.
Дальше расскажите про Python-часть. Клиент: официальный пакет elasticsearch или pysolr для Solr, в Django часто django-elasticsearch-dsl. Индексация: массовая загрузка через helpers.bulk, синхронизация с PostgreSQL через задачи Celery после коммита, outbox-таблицу или CDC. Переиндексация без простоя: новый индекс, reindex, переключение алиаса.
Хорошо показать знание устройства. Оба движка построены на Apache Lucene. Поля text и keyword ведут себя по-разному: первое разбивается анализатором, второе хранится целиком для фильтров и сортировки. Документ становится доступен для поиска не сразу, а после refresh, по умолчанию раз в секунду. После смены лицензии Elastic появился форк OpenSearch, его часто берут в облаках.
Цифры результата называйте свои. Если опыта не было, скажите, как решали поиск иначе, например через tsvector и GIN-индекс в PostgreSQL, и при каком объёме перешли бы на отдельный движок.
Где спотыкаются
Используют Elasticsearch как основное хранилище. Транзакций нет, источником правды должна оставаться основная база, а индекс можно пересобрать.
Не продумывают синхронизацию: пишут в базу и в индекс в одном обработчике без повторов, и при сбое данные тихо расходятся.
Меняют тип существующего поля в маппинге и удивляются ошибке. Такое делается только новым индексом и переиндексацией, поэтому алиасы нужны с первого дня.