Hybrid search runs keyword retrieval, typically BM25, and vector retrieval over embeddings on the same query, then merges the two ranked lists. A common merge is reciprocal rank fusion, which scores each document as sum(1 / (k + rank)) over the lists it appears in, with k = 60 in Cormack, Clarke and Büttcher, Reciprocal Rank Fusion; because it uses only ranks, BM25 scores and cosine similarities never need to be put on the same scale.

In an FDE interview

Adding keyword retrieval is the fix to try when a vector-only search misses exact terms: a statute number in a legal corpus, a trim code in used-car listings, an error code in support tickets. Diagnose before changing anything: split the test queries by type (identifier lookups versus natural-language questions), measure recall for each, then add keyword retrieval and fusion and show which query types improved.

Pull a deep list from each retriever before fusing, and apply the same filters, permissions included, to both. Know the limit of rank fusion: it ignores how confident each retriever was, so when identifier lookups should always win, route those queries to keyword search, or use weighted fusion over normalized scores and tune the weight on the labeled set. Be ready to explain BM25’s term-frequency saturation and length normalization (Robertson and Zaragoza, The Probabilistic Relevance Framework: BM25 and Beyond) and what they change against plain TF-IDF: saturation (k1) stops a term repeated many times from dominating, and length normalization (b) stops long documents winning just because they contain more words.

BM25 against TF-IDF has you implement BM25 and compare it with TF-IDF on the same queries, and a planned drill, reciprocal rank fusion, will cover the merge.

Related: reranking, embedding.