Beyond vector search: hybrid, rerank, and graph RAG
When plain vector search hits its ceiling, three upgrades actually help: hybrid search, reranking, and graph RAG. When each one earns its added complexity.

Ask a naive RAG setup a plain factual question and it can come back with five confident, well-formatted, completely wrong chunks. Vector search did exactly what it was built to do, find text that sounds like the question. Sounding right and being right turn out to be two different jobs, and nothing in the system notices the difference on its own.
The previous post covered where naive top-k vector search breaks. This one covers what you actually reach for once it does. Three upgrades, in order of how often you'll need them.
Hybrid search: bring keyword matching back
Vector search finds things that mean something similar to your query. It's noticeably worse at exact matches, a product code, an error string, a person's name, because those don't have rich semantic meaning for an embedding model to latch onto. BM25, a keyword-ranking algorithm that predates embeddings by decades, is still better than vector search at exactly that.
Hybrid search runs both in parallel, a keyword search and a vector search, then combines the two ranked lists into one. You get vector search's sense of "similar meaning" and BM25's precision on exact terms, in the same result set. This is usually the first upgrade worth making, because it's cheap, well-understood, and fixes the most common naive-RAG complaint: "it can't find the thing I searched for by name."
Reranking: a second, smarter pass
Top-k retrieval pulls back a rough set of candidates fast, because comparing a query against millions of chunks has to be cheap. Reranking adds a second, slower pass: take that rough set, maybe 50 candidates, and re-score each one against the query using a model built specifically to judge relevance, not just similarity.
The reason this works is that the fast first pass and the careful second pass are optimizing for different things. The first pass has to scan everything, so it uses cheap approximate math. The second pass only has to compare 50 items, so it can afford to actually read each one carefully. You get speed from the first pass and precision from the second, instead of picking one.
Graph RAG: when the answer depends on relationships
Sometimes the fact you need isn't sitting in one chunk of text. It depends on how two things relate to each other, who reports to whom, which component depends on which, what happened before what. Flat chunk retrieval, however good the ranking, struggles here because it treats every chunk as an island.
Graph RAG retrieves from a knowledge graph instead, entities and the relationships between them, so a question about a relationship can be answered by walking the graph instead of hoping the right two chunks both got retrieved and the model correctly stitched them together. It costs more to build, since someone has to construct or extract that graph in the first place. It earns that cost specifically on relationship-heavy data, not on "what does section 4.2 say."
Agentic RAG: let the model decide when to search
Every pattern so far runs retrieval once, upfront, before the model ever sees the question. Agentic RAG flips that: the model gets a search tool and decides for itself when to use it, what to search for, and whether the results were good enough to answer with or worth a second search.
This matters for multi-part questions, where the first search reveals that a second, different search is actually needed, something a single fixed retrieval step can't adapt to mid-answer. It costs more per query, since the model might search two or three times instead of once, and it depends on the model being decent at tool calling, which is a real dependency, not a given.
Picking one
Start with hybrid search, it's the cheapest fix for the most common complaint. Add reranking when "the right chunk was retrieved, just not ranked first" is the failure you're seeing. Reach for graph RAG only when the questions are genuinely relationship-shaped. Agentic RAG is the right call when questions vary enough that a single fixed retrieval step can't cover all of them, and it's overkill if your questions are simple and consistent.
Retrieval solved doesn't mean the system is done, though. So far the model has only ever answered. The next four posts are about what happens once it starts acting.
From the dictionary
Terms used in this post
Quick reference for the 11 terms you met above. Each one comes from the AI dictionary.
- Agentic RAGAI
- A RAG setup where the model itself decides when to retrieve and what to search for, instead of always running one fixed retrieval step before every answer.
- AlgorithmML
- In ML, the recipe used to turn data into a model — the architecture plus the training procedure. Different algorithms (decision trees, gradient-boosted trees, neural networks, transformers) produce different model types.
- BM25Data
- A decades-old keyword-ranking algorithm that scores documents by term overlap with a query, still hard to beat for exact-match retrieval.
- EmbeddingNLP
- A list of numbers (a vector) that represents the meaning of a piece of text. Two pieces of text with similar meanings have embeddings close together in space. The basis of vector search and most modern retrieval.
- Graph RAGNLP
- A RAG variant that retrieves from a knowledge graph instead of flat text chunks, useful when the answer depends on how entities relate to each other, not just what one paragraph says.
- Hybrid SearchData
- Combining keyword search (like BM25) with vector search, so retrieval catches both exact-term matches and semantically similar text.
- ModelML
- In ML, a model is a file of learned numbers (parameters or weights) plus an architecture that tells the program how to use them. Loading a model means reading those numbers; running it means doing arithmetic with them.
- RAGNLP
- Retrieval-Augmented Generation: search your corpus for relevant text, paste it into the LLMs context window, then ask the question. The models weights are unchanged; only the prompt is augmented.
- RerankingData
- A second retrieval pass that re-scores an initial set of candidate chunks for actual relevance to the query, using a model built specifically for that job.
- Tool CallingAI
- A model's ability to output a structured request to run a specific function, then use that function's result to continue answering.
- Vector DatabaseData
- A database optimised for storing and searching embeddings — finding the K nearest vectors to a query vector. Examples: Pinecone, Weaviate, pgvector. The retrieval engine in most RAG systems.
Rate this article
How helpful did you find this?
- 01
From running models to building systems
May 19, 2026
- 02
Prompting as an engineering discipline
May 24, 2026
- 03
RAG done right: chunking and retrieval mechanics
May 29, 2026
- 04
Beyond vector search: hybrid, rerank, and graph RAG
June 3, 2026
- 05
The agent loop: plan, act, observe
June 8, 2026
- 06
Agent memory: scratchpad vs long-term store
June 13, 2026
- 07
Multi-agent systems: orchestration and handoffs
June 18, 2026
- 08
Guardrails: schema validation, filtering, and trust
June 23, 2026
- 09
Evals: how you actually know it got better
June 28, 2026
- 10
Observability: what a production AI system actually logs
July 3, 2026
Newsletter
Get new articles in your inbox
AI engineering, LLM systems, and software architecture — no filler.
No spam. Unsubscribe any time.
Discussion
Comments
Leave a note about the article, architecture choices, or what you would build next.
Loading comments...