Суть
У каждого метода своя слепая зона: векторный поиск пропускает точные ID, коды, имена собственные; BM25 пропускает синонимы и смысл. Гибрид ловит обе категории — берём топ от каждого и объединяем ранги.
Зачем это нужно
Особенно важно, когда в базе знаний много специфичных терминов/кодов: «найди ошибку GO-124» вектор может «размазать» по смыслу, а BM25 найдёт точно. И наоборот, «как ускорить запросы» — это про смысл, тут силён вектор.
Как работает (RRF)
BM25 отбирает топ-50 по точным совпадениям терминов.
Vector Search отбирает топ-50 по семантической близости (косинус, см. Embeddings).
RRF объединяет два ранжирования в общий топ-20:
RRF(d) = 1 / (k + rank_bm25(d)) + 1 / (k + rank_vector(d)), где k — константа (обычно 60).Документ, высоко стоящий в обоих списках, получает максимальный итоговый ранг.
Полученный топ уходит на Reranking (cross-encoder → топ-5).
- Query Expansion / HyDE — смежная техника: запрос расширяют синонимами или генерируют «гипотетический ответ» и ищут уже по нему; помогает на коротких/неоднозначных запросах.
- Связка Hybrid Search + Reranking покрывает ~80% use cases — это и есть минимальный продакшен-стандарт 2026.
- Hybrid и хранилище: PostgreSQL full-text search (
tsvector/tsquery) — лексический поиск, он не равноценен полноценному вероятностному BM25 / sparse-retrieval в dedicated-системах; для production-hybrid часто проще взять dedicated layer (Qdrant с нативным BM25/sparse, OpenSearch и т.п.). Query2doc — близкий к HyDE подход: LLM генерирует псевдо-документ для расширения запроса.
Связано с
- RAG — гибридный поиск = recall-этап retrieval
- Reranking — куда уходит топ гибридного поиска
- Embeddings — семантическая половина гибрида
Открытые вопросы
- как калибровать вес BM25 vs vector и константу k в RRF под свой домен
- HyDE — даёт ли выигрыш, если уже есть reranking