Short answer: Hybrid search combines vector similarity and keyword scores into one ranked result list.
Semantic and lexical signals sit on different scales, so fusion is deliberate. Done well, hybrid retrieval catches both meaning matches and exact identifiers that either method alone would miss.
BM25 scores keyword relevance, and vector similarity scores semantic closeness, but these two numbers don’t naturally sit on the same scale, and simply adding them together without care produces a meaningless result. Hybrid search is the deliberate mechanism that reconciles the two into one coherent ranking, and understanding exactly how that reconciliation happens explains why hybrid search behaves the way it does rather than treating it as an unexplained black box that “just combines” two searches.
Why Can’t a BM25 Score and a Vector Similarity Score Simply Be Added Together Directly?
BM25 scores are unbounded and depend heavily on the specific collection being searched, a score of five might be excellent in one context and unremarkable in another. Vector similarity scores, by contrast, typically live within a fixed, predictable range determined by whatever distance metric is being used. Adding these two numbers directly would let whichever score happens to have the larger typical magnitude dominate the combined result, regardless of which search actually found the more relevant match. Before these two very different kinds of scores can be meaningfully combined, they first need to be brought onto some common, comparable footing.
How Does a Fusion Algorithm Actually Bring These Two Different Scores Together?
One common approach normalizes each search’s own results independently, rescaling so the best result from each individual search becomes a perfect score and the weakest becomes the lowest, with everything else falling proportionally in between. Once both searches have been rescaled onto this same normalized footing, their scores can genuinely be combined and compared like for like, since both are now expressed on an equivalent scale rather than in their own incompatible native units. A different, simpler approach ignores the actual score values entirely and works from rank position alone, giving the top result from each search the highest combined weight and letting that weight decrease predictably further down each list, then adding those rank-based weights together instead of the original scores.
Both approaches accomplish the same underlying goal, making two structurally different kinds of scores genuinely comparable, but they preserve different information: the normalized-score approach keeps a sense of how much better the best result was compared to the rest, while the rank-based approach discards that nuance and cares only about ordering.
What’s the Practical Difference Between These Two Ways of Combining Scores?
The normalized-score approach can meaningfully reflect a case where one search found a single, dramatically better match while the other search’s top few results were all roughly comparable to each other. In that situation, the search that found a genuinely standout result gets to express that standout quality in the combined ranking, because its normalized score reflects the actual gap between its best match and everything else. The rank-based approach can’t express this at all, since it only knows that a result was “first” or “second,” with no way to represent how much better first actually was than second. This is exactly why score-based normalization has become the more common default: it retains genuinely useful information that pure rank position throws away.
How Does a Search Actually Control How Much Weight Goes to Each Side of the Combination?
After both scores have been made comparable, whichever fusion approach is used, a weighting factor determines how much each side actually contributes to the final combined score. Setting this weighting to favor keyword matching heavily makes the combined search behave close to pure BM25, useful when exact terminology matters most. Setting it to favor vector similarity heavily makes the combined search behave close to pure semantic search, useful when conceptual understanding matters more than exact wording. A balanced setting somewhere in between lets both signals genuinely contribute, which is exactly why this weighting deserves its own dedicated, closer treatment rather than being folded into this general explanation of how fusion works.
How Does Weaviate Engram Apply This Fusion Machinery to Memory Search Specifically?
Weaviate Engram’s hybrid retrieval option runs both a vector search and a BM25 keyword search against stored memories in parallel, then applies exactly this kind of fusion to combine the two into one ranked result set a caller receives as a single, coherent list. Consider a recruiting platform’s candidate-matching assistant helping a hiring manager find candidates who both hold a specific certification and generally fit a broader role description, where both exact and semantic matching genuinely matter together:
from engram import EngramClient
client = EngramClient(api_key=os.environ["ENGRAM_API_KEY"])
client.memories.add(
"Candidate holds an active PMP certification and has led cross-functional teams delivering enterprise software rollouts across healthcare and finance clients.",
properties={"candidate_id": "candidate-7734"},
)
A hiring manager’s search benefits from combining both signals into one ranked result:
results = client.memories.search(
query="Looking for a PMP-certified project lead with enterprise rollout experience.",
retrieval_config=HybridRetrieval(limit=10),
)
The exact certification acronym “PMP” benefits from BM25’s precise matching, correctly treating it as a strong, distinguishing signal rather than something a purely semantic comparison might blur across similarly-worded but differently-certified candidates. The broader description of enterprise rollout experience and cross-functional leadership benefits from vector search’s ability to recognize conceptually related phrasing even when candidates described their own experience using different words entirely. Fusing these two signals into one combined ranking, rather than running two separate searches and asking the hiring manager to reconcile them manually, is exactly the value this chapter has been explaining: neither score alone would have surfaced the genuinely best match as clearly as the two working together.
Fusion explains how two different scores get reconciled into one ranking, but it leaves open exactly how much weight each side should actually receive for a given kind of search. Our next chapter, What is the alpha parameter in hybrid search?, turns to exactly that tuning decision.