// why vectors miss
Vector search matches meaning. That's great for "how do I fix a timeout" — and bad for an exact token: a product code, an error code, a version string, a rare name. The embedding blurs "E-4031" into a generic semantic direction, so the doc that contains it may not surface.
Keyword search is the opposite
Old-school keyword search — BM25 — does the exact thing vectors can't: it nails literal terms and weighs how unique each keyword is in your corpus. Its weakness is the mirror image: it misses anything worded differently.
Hybrid = run both, then fuse
Hybrid search runs the keyword engine and the vector engine in parallel on one query, then fuses their two ranked lists. The common fusion is Reciprocal Rank Fusion (RRF): it scores each doc by its rank position in each list, not by raw scores — which neatly sidesteps the fact that BM25 and cosine scores live on different scales.
A doc both engines rank rises to the top — so your exact code comes back first, and the meaning-matches still come along. Most vector DBs ship this built in (Qdrant, Weaviate, Pinecone, Elastic/OpenSearch).
The catch
Hybrid isn't a free win. You get a weight to tune (how much each side counts — Weaviate's alpha: 0 = keyword, 1 = vector), two indexes to run, and a fusion step's worth of latency. Wrong weight can hurt; "neither algorithm is best in all cases."
Sources: Weaviate — Hybrid Search Explained · Qdrant — Hybrid Search & RRF · Cormack, Clarke & Buettcher — Reciprocal Rank Fusion (Waterloo, 2009)
One concept a week. Free.
The deeper, copy-paste version of each ToolCall short — in your inbox.
// total: 0.00 · spam: void · unsubscribe: one click
