Как осуществляется поиск по документам
Что проверяют
Знаете ли вы, как поиск устроен изнутри, от обратного индекса и BM25 до векторного поиска, и умеете ли выбирать между подходами. Следом обычно спрашивают, как измерить качество поиска, или просят набросать обратный индекс в коде.
Как отвечать
Начните с лексического поиска, он до сих пор основа:
- обратный индекс: словарь «терм → отсортированный список документов» (posting list), часто с позициями слов для фразового поиска. Запрос из нескольких слов через AND это пересечение списков двумя указателями за линейное время;
- анализ текста: токенизация, нижний регистр, стоп-слова, приведение словоформ. Для русского это критично: без стемминга или лемматизации запрос «вакансии» не найдёт «вакансия»;
- ранжирование: BM25. В Lucene, а значит в Elasticsearch, OpenSearch и Solr, он по умолчанию вместо классического TF-IDF. Параметры
k1(насыщение частоты термина, по умолчанию 1.2) иb(нормализация по длине документа, 0.75).
Дальше семантический поиск: документы и запрос переводятся в эмбеддинги мультиязычной моделью, ближайшие ищутся приближённо по ANN-индексу, обычно HNSW (FAISS, pgvector, kNN в OpenSearch и Elasticsearch). Длинные документы режут на фрагменты: у модели ограничен контекст, а один вектор на весь текст размывает смысл.
На практике выигрывает гибрид. BM25 и векторный поиск дают по сотне кандидатов, списки сливают через Reciprocal Rank Fusion, верхушку переранжирует cross-encoder. Лексика ловит точные совпадения, векторы понимают перефразировки.
Качество меряют на размеченном наборе запросов: Recall@k для этапа отбора, nDCG и MRR для порядка выдачи. В проде смотрят на клики и долю запросов без результатов.
Где спотыкаются
Говорят «положу в Elasticsearch» и не могут объяснить, что происходит внутри. На вопрос про анализатор или BM25 ответа нет.
Считают, что эмбеддинги заменяют полнотекстовый поиск. Артикулы, коды ошибок и фамилии векторный поиск находит плохо, поэтому гибрид и нужен.
Не называют ни одной метрики. Без оценочного набора любое изменение ранжирования проверяют на глаз, а улучшение на пяти запросах часто ломает сотню других.