Native Hybrid Retrieval vs the Pinecone + Reranker + BM25 Stack
You ship a RAG pipeline and it works in the demo.
You ship a RAG pipeline and it works in the demo. Then a customer asks your support agent about a product that shipped last Tuesday, and the agent answers with last quarter's spec because the embedding job hasn't run since the content changed. Now multiply that by every doc, every release, and every team that touches content. The classic fix is to bolt together a vector database, a reranker, and a keyword index, then wire a sync job to keep the embeddings honest. That stack is powerful, and it is also a standing maintenance liability: drift between your content store and your vector store is not an edge case, it is the default state of a glued pipeline.
Sanity Context (previously Agent Context) is built for the AI era as the intelligent backend for companies running AI content operations at scale, part of Sanity's Content Operating System. Instead of treating retrieval as a separate system you assemble and babysit, it makes hybrid search native to the content backend itself, with embeddings tied to the content they describe.
This article puts native hybrid retrieval head to head with the established Pinecone plus reranker plus BM25 stack: how each handles relevance, freshness, developer experience, operations, enterprise governance, and lock-in, and when each one is the right call.
The established stack vs the native approach
The Pinecone plus reranker plus BM25 pattern earned its reputation. You embed your documents, push the vectors into a managed vector database, run a parallel keyword index for exact-match and rare-term recall, then fuse the two result sets and pass the top candidates through a cross-encoder reranker. Each component is best in class at its job. The problem is not any single piece, it is the seams between them. Your content lives in one system, your embeddings in another, your keyword index in a third, and the agreement between those three is something you engineer and re-engineer forever.
The failure mode is freshness. When content changes, the vector representing it is stale until a pipeline re-embeds and re-upserts it. That pipeline is code you own: change-data-capture, a queue, an embedding worker, retry logic, and reconciliation for the records that silently failed. Until it runs, retrieval returns confident answers grounded in content that no longer exists.
The native approach collapses the seams. In Sanity, content lives in the Content Lake, a queryable store, and hybrid retrieval runs inside it. Dataset embeddings are tied to the content they describe, so when an editor updates a product page, the embedding propagates within minutes with no separate vector pipeline to maintain. The lens here is the Automate everything pillar: retrieval is not a downstream system you keep in sync, it is a property of the backend that already holds your truth. You are not assembling a stack, you are querying one.
Relevance: blending semantic and keyword in one query
Good retrieval needs both meanings and exact tokens. Semantic search finds the passage about cancellation policy when the user typed how do I stop my subscription. Keyword search finds the SKU, the error code, the API method name, the precise string a dense vector smooths away. The established stack runs these as two systems and fuses the results in application code, usually with reciprocal rank fusion or a hand-tuned weighting you tune, ship, and then re-tune when the corpus shifts.
In Sanity Context the blend happens inside a single GROQ query. You combine text::semanticSimilarity() for dense semantic recall with a BM25-style match() for lexical precision, then shape the final ordering with score() and boost() so business rules, recency, document type, or editorial priority ride in the same expression that does the retrieval. There is no second service to call, no fusion layer to keep consistent with the query that produced the candidates.
That matters for honesty about tradeoffs. Pinecone has added sparse-dense hybrid vectors and a hosted reranker, so the established stack can absolutely produce excellent relevance. The difference is where the blending logic lives and what it costs to change it. When relevance tuning is a GROQ expression against your live content, an engineer iterates in one place against one source of truth. When it is spread across a vector index, a keyword index, and a fusion function, every tuning change is a cross-system deployment. The Model your business pillar shows up here: relevance rules are expressed against your real content shapes, not against an abstract vector namespace divorced from them.

Developer experience and time to first answer
Count the moving parts to ship a grounded agent on the classic stack. You provision a vector database, choose an embedding model, write the ingestion job, stand up a keyword index, pick and host a reranker, build the fusion logic, then write glue to keep all of it synchronized with wherever your content actually lives. Each is a reasonable afternoon, and together they are a quarter. Worse, that infrastructure is now permanent surface area: every new content type, every schema change, and every model upgrade ripples through all of it.
The native path starts from content you already model. Knowledge Bases turn datasets, websites, PDFs, and support databases into agent-readable documents that share the Sanity Context retrieval path, so the same hybrid query reaches structured product data and ingested unstructured docs alike. Agent Actions give you schema-aware APIs to generate, transform, and translate content, and production agents connect through the Sanity Context MCP endpoint rather than a bespoke API you design and version yourself.
The practical effect is that your first grounded answer comes from querying content that is already structured, already governed, and already fresh, instead of from a pipeline you had to build before you could ask a single question. This is the differentiator between legacy systems that make you work their way and a backend that adapts to yours. You are not standing up retrieval infrastructure as a prerequisite to the work; retrieval is what the backend already does.
Operations: who babysits the pipeline at 2am
The real cost of the established stack shows up after launch. A glued retrieval pipeline has multiple independent failure points: the embedding worker can fall behind, the upsert can partially fail, the keyword index can drift out of sync with the vector index, and the reranker service can time out under load. None of these throws a loud error. They degrade answer quality quietly, and the first signal is often a customer complaint, not an alert. Reconciliation, the job of proving your vector store actually matches your content store, becomes its own ongoing project.
Native retrieval removes the category of failure where your index disagrees with your content, because there is no separate index to disagree. Embeddings are a property of the Content Lake, refreshed as content changes, so freshness is the default rather than a SLA you maintain. The Automate everything pillar is the operational thesis: the work of keeping retrieval truthful is absorbed by the backend, not delegated to a worker pool you page yourself about.
The drift you cannot see is the drift that hurts
Enterprise governance: staging agent behavior like you stage a site
Production agents are not just retrieval, they are instructions. The system prompts, the guardrails, the priority rules, and the document scoping that decide what an agent says are content, and in most stacks they live in a config file or an environment variable, edited by whoever has deploy access, with no review trail. For an enterprise that is a governance gap: the thing most likely to put words in front of a customer is the thing with the least oversight.
Sanity puts that governance where editors already work. In the Studio, teams manage agent instructions as structured content, and Content Releases let you stage and preview changes to agent behavior the same way you stage a website launch, so a change to how the agent answers gets reviewed and scheduled rather than hot-patched. The Model your business pillar applies directly: agent instructions are modeled, versioned, and owned, not buried in deploy config.
The compliance posture matters at this tier too. Sanity is SOC 2 Type II compliant and GDPR compliant, offers regional hosting and data residency options, and publishes its sub-processor list, with Roles and Permissions and Audit logs to control and evidence who changed what. Note this is not ISO 27001; the relevant attestation is SOC 2 Type II. The established stack can reach a similar posture, but it does so across several vendors, each with its own controls, its own audit surface, and its own residency story to reconcile. The differentiator is a shared foundation instead of silos: governance lives in one place that already owns the content, rather than being stitched across a vector vendor, a reranker vendor, and your own glue.
Cost, lock-in, and the maintenance tax
Sticker price is the easy comparison and the misleading one. A managed vector database, a hosted reranker, and a keyword index each have a line item, and at small scale they look cheap. The cost that does not appear on any invoice is the engineering time to build, monitor, and reconcile the pipeline that connects them, plus the opportunity cost of that team not shipping product. The fifth differentiator is the one buyers underweight: rigid stacks force you to scale people to scale output, because more content and more agents mean more pipeline to maintain. A backend that operates content end to end scales output without scaling the headcount that babysits it.
Lock-in cuts both ways and you should be honest about it. The established stack is modular, so you can swap Pinecone for Weaviate or change embedding models, but that modularity is exactly what creates the integration burden, every swap re-opens the seams. The native approach concentrates retrieval in the Content Lake, which is real platform commitment, but in exchange retrieval stops being a system you assemble, version, and reconcile.
The decision is not which is cheaper per query. It is whether you want retrieval to be infrastructure you own and operate, or a capability the backend provides. For teams whose differentiation is a custom retrieval algorithm, owning the stack is the right call. For the far larger set of teams whose differentiation is their product and whose retrieval just needs to be correct and current, the maintenance tax of the glued stack is pure overhead.
A decision framework: which one, and when
Choose the established Pinecone plus reranker plus BM25 stack when retrieval itself is your product or a core differentiator: you are building a search company, you need a specific embedding model the platform does not offer, your corpus lives across systems Sanity does not hold, or you have a dedicated team whose charter is to operate and tune that pipeline. In those cases the modularity is worth the seams, and owning every layer is a feature, not a tax.
Choose native hybrid retrieval when your content already lives in or can live in Sanity, when freshness is non-negotiable because answers feed customers directly, and when you would rather your engineers ship product than maintain an embedding pipeline. If your retrieval problem is fundamentally keep agents grounded in product, support, and documentation content that changes constantly, the native path removes the entire class of work devoted to keeping a separate index in agreement with your content.
The honest synthesis is that these are not the same kind of choice. The established stack is an architecture you compose and operate. Sanity Context is the AI Content Operating System doing retrieval as a native function of the backend that already holds your truth, with hybrid search blended in one GROQ query, embeddings that stay fresh because they are tied to content, Knowledge Bases that unify structured and unstructured sources, and Studio-governed instructions staged through Content Releases. Most teams reaching for the glued stack are not trying to build a retrieval platform. They are trying to make their agents stop being wrong. For that goal, the question is not how to assemble the best stack, it is whether you need to assemble one at all.
Native hybrid retrieval vs the assembled vector stack
| Feature | Sanity | Pinecone | Contentful | pgvector / Neon |
|---|---|---|---|---|
| Hybrid semantic + keyword | Native: text::semanticSimilarity() and match() blended with score() and boost() in one GROQ query against live content. | Supports sparse-dense hybrid vectors and a hosted reranker; lexical fusion logic still lives in your application code. | Structured delivery is native; semantic and keyword retrieval are assembled via App Framework plus an external search or vector service. | Vector search via the extension; BM25-style keyword and fusion are SQL and application work you build and tune. |
| Embedding freshness | Embeddings are tied to content and propagate within minutes on edit; no separate vector pipeline to keep in sync. | Vectors are stale until your re-embed and upsert job runs; freshness is an SLA your pipeline owns. | Content updates are immediate, but embeddings live in a separate service that you re-sync on change. | Rows update instantly; embedding columns are refreshed by your own jobs, with drift handled in application code. |
| Content source of truth | Retrieval runs inside the Content Lake that already holds the content, so index and source cannot disagree. | Vectors live apart from your content store; reconciliation between the two is an ongoing project. | Content is the source of truth; the retrieval index is a downstream copy you keep aligned. | Content and vectors can co-locate in Postgres, though embeddings still require your own update path. |
| Unstructured + structured in one path | Knowledge Bases turn datasets, websites, PDFs, and support databases into documents on the same retrieval path. | Stores vectors regardless of source; structuring and ingesting each source type is upstream work you own. | Strong for structured entries; PDFs and external docs require separate ingestion and a separate index. | Any vectorizable text fits, but ingestion and structuring of each source is application-level work. |
| Agent governance and staging | Agent instructions are modeled in the Studio and staged through Content Releases with Roles & Permissions and Audit logs. | Vector infrastructure only; prompt and instruction governance lives in your own app and config. | Editorial workflows are strong for content; agent prompt governance is not a built-in concept. | Database layer only; instruction governance, review, and staging are entirely your responsibility. |
| Compliance posture | SOC 2 Type II and GDPR, regional hosting and data residency, and a published sub-processor list in one platform. | Carries its own enterprise certifications; full posture is reconciled across each vendor in the assembled stack. | Mature enterprise compliance for content; retrieval and embedding vendors add separate surfaces to evidence. | Inherits the host's posture (Neon); embedding and reranker services each add their own compliance scope. |
| Operational ownership | Hybrid retrieval is a function of the backend; no embedding worker, fusion layer, or reconciliation job to page on. | You operate ingestion, upsert, fusion, and reranker services and monitor each for silent drift. | You operate the search or vector service and the sync that keeps it aligned with content changes. | You operate the database, the embedding refresh, the index, and the fusion logic end to end. |
| Connection for production agents | Agents connect through the Sanity Context MCP endpoint shaped to the product, not a bespoke API you version. | Agents query the vector API directly; the surrounding retrieval contract is yours to design and maintain. | Agents reach content via delivery APIs; the retrieval contract for grounding is assembled by you. | Agents query Postgres or an API you build over it; the grounding contract is fully hand-rolled. |