{"id":33719,"date":"2026-06-04T14:17:56","date_gmt":"2026-06-04T21:17:56","guid":{"rendered":"https:\/\/www.pingcap.com\/?p=33719"},"modified":"2026-06-05T14:19:41","modified_gmt":"2026-06-05T21:19:41","slug":"hybrid-search-rag-retrieval-accuracy","status":"publish","type":"post","link":"https:\/\/www.pingcap.com\/ko\/blog\/hybrid-search-rag-retrieval-accuracy\/","title":{"rendered":"The Laptop Return that Broke a RAG Pipeline"},"content":{"rendered":"<p class=\"wp-block-paragraph\"><em>Editor\u2019s note: This post originally appeared on The New Stack and is republished with permission. The original version is available\u00a0<a href=\"https:\/\/thenewstack.io\/rag-pipeline-hybrid-search\/\">\uc5ec\uae30<\/a>.<\/em><\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><\/blockquote>\n<\/blockquote>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Key_Takeaways\"><\/span><strong>Key Takeaways<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Semantic similarity isn&#8217;t factual correctness. Stale or out-of-scope docs still look &#8220;similar&#8221;, and that gap is where RAG breaks.<\/li>\n\n\n\n<li>The missing data lives in columns, not vectors. This is a database problem, not an embeddings one.<\/li>\n\n\n\n<li>Hybrid search combines vector and SQL filters in one query, with 94% vs 72% recall for ~15\u201330ms.<\/li>\n\n\n\n<li>Skip the &#8220;vector sidecar.&#8221; A separate vector database means sync gaps and duplicated ACLs. One database removes them.<\/li>\n<\/ul>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">A few months ago, one of our users filed a bug report that stuck with me. They had built a customer-support agent on top of a RAG pipeline. A user asked whether they could return a laptop purchased three weeks earlier. The agent retrieved a return policy document, quoted a 30-day window, and told the customer to ship it back. Perfectly confident answer. Completely wrong.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The document was real. It just happened to be from 2023. The current policy had been updated to a 14-day window for electronics. Vector similarity has no notion of recency or scope as cosine distance between the query embedding and the 2023 policy was excellent. Why wouldn\u2019t it be? The words were almost identical.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">When I dug into this, I realized it wasn\u2019t really a bug. It was an architectural problem, one that I\u2019d been seeing more and more as teams moved RAG from prototype to production. And it changed how I think about what a database needs to do in the AI era.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"The_Gap_Nobody_Talks_About\"><\/span><strong>The Gap Nobody Talks About<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">We\u2019ve spent the last two years as an industry fixated on hallucination. RAG was the answer: Ground the model in real documents. And it works. But somewhere along the way, we started treating retrieval as a solved problem. It isn\u2019t.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Here\u2019s the thing I keep coming back to: Semantic similarity and factual correctness are not the same thing. A vector search finds documents that are close in meaning to your query. That\u2019s useful, but \u201cclose in meaning\u201d doesn\u2019t mean \u201ccorrect for this context.\u201d A deprecated policy is semantically similar to the current one. A document scoped to enterprise customers is semantically similar to a query from a free-tier user. A confidential document in tenant A\u2019s namespace is semantically similar to a query from tenant B.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I call this the retrieval accuracy gap. The distance between what vector similarity thinks is relevant and what your application actually needs to be correct. And you can\u2019t close it with better embeddings. The missing information\u2014timestamps, scopes, permissions\u2014is structured data. It lives in columns, not in vector space.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This is a database problem.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"What_I_Mean_by_Hybrid_Search\"><\/span><strong>What I Mean by Hybrid Search<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">When I say hybrid search, I mean something specific: a single database query that combines vector similarity with structured SQL predicates. Not a two-phase pipeline where you do a vector search, get back 100 candidates, and then filter in application code. A single query, optimized holistically by the database engine.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The difference matters more than it sounds. When filtering happens in application code, you\u2019re doing the expensive work\u2014scanning the full vector index\u2014before applying the cheap constraints. That\u2019s backwards. A database that understands both vector and relational operations can use selectivity estimates to decide whether to filter first or scan first. It\u2019s the same query planning logic we\u2019ve had in relational databases for decades. It just needs to extend to vector indexes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Let me show you what this looks like concretely. Assume a schema like this:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>CREATE TABLE documents (\n  id         BIGINT PRIMARY KEY AUTO_INCREMENT,\n  content    TEXT,\n  embedding  VECTOR(1536),\n  team_id    BIGINT NOT NULL,\n  doc_type   VARCHAR(50),\n  updated_at DATETIME NOT NULL,\n  status     ENUM('active','deprecated','draft'),\n  INDEX idx_embedding USING HNSW (embedding),\n  INDEX idx_team_status (team_id, status)\n);<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Nothing exotic. Standard relational schema with a vector column. Now here are three query patterns that solve the failure modes I described.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Pattern 1: Recency Filtering<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The stale-document problem disappears when you add a time constraint:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT id, content,\n       VEC_COSINE_DISTANCE(embedding, @query_vec) AS distance\nFROM documents\nWHERE status = 'active'\n  AND updated_at &gt;= NOW() - INTERVAL 90 DAY\nORDER BY distance\nLIMIT 5;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The WHERE clause prunes the candidate set before the vector scan. In a 10-million-row corpus, this typically eliminates 60\u201380% of the rows. The database gets faster <em>\uadf8\ub9ac\uace0<\/em> more accurate at the same time. That\u2019s the kind of tradeoff I like.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Pattern 2: Tenant Isolation via Join<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">This is the pattern I worry about most, because when it fails, it\u2019s a security incident, not just a bad answer:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT d.id, d.content,\n VEC_COSINE_DISTANCE(d.embedding, @query_vec) AS distance\nFROM documents d\nJOIN user_permissions p\n ON p.team_id = d.team_id\nWHERE p.user_id = @current_user\n AND d.status = 'active'\nORDER BY distance\nLIMIT 5;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">A relational join against a permissions table. No matter how semantically similar a document is to the query, the user never sees content outside their scope. The constraint is enforced by the database engine, not by application code that someone might forget to update.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/www.pingcap.com\/ko\/compare\/best-vector-database\/\">Try doing this with a standalone vector database<\/a>. You\u2019d have to duplicate your entire ACL into metadata tags, re-index every time permissions change, and hope your tag-based filtering handles the combinatorial explosion of permission groups. I\u2019ve watched teams try this. It doesn\u2019t end well.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Pattern 3: Category Ranking with Aggregation<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Sometimes the right answer isn\u2019t a single document but a pattern across many documents. This query groups matches by type and finds where the signal is densest:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT d.doc_type,\n       COUNT(*)                                  AS match_count,\n       MIN(VEC_COSINE_DISTANCE(d.embedding, @query_vec)) AS best_dist,\n       GROUP_CONCAT(d.id ORDER BY\n         VEC_COSINE_DISTANCE(d.embedding, @query_vec)) AS doc_ids\nFROM documents d\nWHERE d.status = 'active'\n  AND VEC_COSINE_DISTANCE(d.embedding, @query_vec) &lt; 0.3\nGROUP BY d.doc_type\nORDER BY match_count DESC, best_dist ASC\nLIMIT 3;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This tells the LLM: <em>\u201cThe answer is most likely in the FAQ documents (7 matches) rather than the blog posts (2 matches).\u201d<\/em> Then you retrieve the top documents from the winning category. It\u2019s a GROUP BY. Vector databases can\u2019t do GROUP BY. This is relational algebra, and it changes retrieval quality dramatically when your corpus contains overlapping document types.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"What_the_Numbers_Look_Like\"><\/span><strong>What the Numbers Look Like<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">We modeled both approaches after production workloads against a 10-million-row enterprise knowledge base. This includes 18 months of content, mixed document types, and 500 queries with human-labeled ground truth. Here\u2019s what we found:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Metric<\/strong><\/td><td><strong>Pure Vector (top-5)<\/strong><\/td><td><strong>Hybrid (top-5)<\/strong><\/td><\/tr><tr><td><strong>Recall@5<\/strong><\/td><td>72%<\/td><td>94%<\/td><\/tr><tr><td><strong>Precision@5<\/strong><\/td><td>58%<\/td><td>87%<\/td><\/tr><tr><td><strong>Stale doc in top 5<\/strong><\/td><td>23%<\/td><td>&lt; 1%<\/td><\/tr><tr><td><strong>Cross-tenant leak rate<\/strong><\/td><td>8%<\/td><td>0%<\/td><\/tr><tr><td><strong>p50 latency<\/strong><\/td><td>45 ms<\/td><td>62 ms<\/td><\/tr><tr><td><strong>p99 latency<\/strong><\/td><td>120 ms<\/td><td>155 ms<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The latency cost is 15\u201330 milliseconds. Invisible to the user. The zero cross-tenant leak rate isn\u2019t a statistical improvement as it\u2019s a guarantee enforced by a relational join. That\u2019s the kind of property you can bring to a security review.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">What I find interesting is that hybrid search is actually faster in many real-world cases, because the structured filters reduce the vector search space so dramatically. When 70% of your corpus is pruned before the vector scan even starts, the wall-clock time drops. Please keep in mind that results will vary depending on corpus distribution and filtering selectivity.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"The_%E2%80%9CVector_Sidecar%E2%80%9D_Anti-Pattern\"><\/span><strong>The \u201cVector Sidecar\u201d Anti-Pattern<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">I want to talk about an architectural pattern I see constantly, because I think it\u2019s the root cause of most RAG quality problems in production.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The pattern goes like this: you have a primary database\u2014usually MySQL or PostgreSQL\u2014where your application data lives. Then you stand up a separate vector database for embeddings. Now you need a sync pipeline to keep them consistent. Every document insert, update, and deletion has to propagate to both systems. You\u2019re maintaining two schemas, two connection pools, two monitoring dashboards, and a fragile ETL job in between.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I call this the vector sidecar, and it creates three problems that compound over time:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Consistency windows. <\/strong>There\u2019s always a gap where the two systems disagree. A document can be marked as deprecated in your primary database but still gets returned by the vector store until the sync catches up. In the return-policy example, this is exactly what happened\u2014the policy was updated in the primary database, but the vector index was stale.<\/li>\n\n\n\n<li><strong>No cross-system joins. <\/strong>You can\u2019t join your ACL table against your vector index in a single query. So you end up duplicating permission data as metadata tags, which means every permission change requires a re-index. At scale, this gets expensive and error-prone.<\/li>\n\n\n\n<li><strong>Double the operational surface. <\/strong>Two databases means two sets of on-call rotations, two capacity planning models, two failure modes. I\u2019ve been building distributed systems for over a decade, and the single most effective way to improve reliability is to reduce the number of moving parts.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">The alternative is straightforward: Put vectors and structured data in the same database. One connection string, transaction boundary, and consistency model. The database handles the query planning, deciding whether to scan the vector index first or filter first based on selectivity estimates.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This is one of the reasons we built vector support directly into <a href=\"https:\/\/www.pingcap.com\/ko\/tidb\/\">\ud2f0DB<\/a>. When we started seeing our users run into these exact problems\u2014consistency bugs, cross-tenant leaks, operational complexity\u2014the answer wasn\u2019t a better sync pipeline. It was eliminating the need for a sync pipeline entirely.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Why_SQL_Compatibility_Matters_Here\"><\/span><strong>Why SQL Compatibility Matters Here<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">There\u2019s a practical dimension to this that I think is underappreciated. When we made the decision years ago to implement the MySQL wire protocol in TiDB, it was about reducing adoption friction. But in the AI era, it turns out to have a deeper benefit.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">SQL is the lingua franca of application development. Every ORM speaks it, every connection pool supports it, and every engineer on your team has written SQL queries. When your AI database speaks the same protocol, the hybrid search patterns I described above aren\u2019t exotic\u2014they\u2019re just SQL queries. Your team doesn\u2019t need to learn a new query language, a new client library, or a new operational model. They write the same SQL they\u2019ve always written, with a vector distance function added.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I\u2019ve learned from watching thousands of TiDB deployments that adoption barriers matter more than feature lists. The best architecture is the one your team can actually ship.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"When_You_Dont_Need_Hybrid_Search\"><\/span><strong>When You Don\u2019t Need Hybrid Search<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">I want to be honest about where pure vector search is perfectly fine, because I think the credibility of any technical recommendation depends on acknowledging its limits.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Single-tenant, single-document-type corpora. <\/strong>If you\u2019re building a knowledge base search over one product\u2019s documentation for one team, pure vector search with a good embedding model will serve you well. The failure modes I described arise from heterogeneity, or multiple tenants, multiple document types, multiple time horizons.<\/li>\n\n\n\n<li><strong>Exploratory or creative use cases. <\/strong>If the user is brainstorming\u2014\u201cfind me something related to this idea\u201d\u2014approximate retrieval is actually what you want. Strict correctness isn\u2019t the goal.<\/li>\n\n\n\n<li><strong>Human-in-the-loop workflows. <\/strong>If a human reviews every result before it\u2019s acted on, the cost of an occasional stale document is manageable. The stakes change when agents take actions autonomously.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">If correctness is optional, vectors are enough; if correctness is required, they aren\u2019t. But the moment you have multiple tenants, documents that expire, or any scenario where a wrong retrieval leads to a wrong action without human review, you need hybrid search. For most production RAG systems, that\u2019s day one.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"The_Middle_Layer\"><\/span><strong>The Middle Layer<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">I\u2019ve been thinking a lot about where the real leverage is in the AI stack. The industry has invested enormous energy in two layers: the embedding model (how well do we encode meaning?) and the generation model (how well do we synthesize answers?). Both are important. But between them sits a third layer that\u2019s been treated as a commodity: the database query that actually retrieves context.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This middle layer is where correctness lives. The embedding model turns a question into a vector. The generation model turns documents into an answer. But the retrieval query is what decides which documents the model sees. Get this wrong, and everything downstream is wrong too, no matter how good your embedding or your LLM.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Hybrid search\u2014combining vector similarity with relational filters in a single query, in a single database\u2014is how you close the retrieval accuracy gap. It\u2019s not a sophisticated technique. It\u2019s standard SQL with a distance function. The only prerequisite is a database that doesn\u2019t force you to choose between vectors and relations.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">When we started building TiDB more than a decade ago, our thesis was that the database should adapt to the application, not the other way around. That meant MySQL compatibility so you didn\u2019t have to rewrite your app. It meant horizontal scalability so you didn\u2019t have to re-architect at growth inflection points. And now it means native vector support so you don\u2019t have to bolt on a separate system to build AI features.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The thesis hasn\u2019t changed. The applications have.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Try <a href=\"https:\/\/www.pingcap.com\/ko\/ai\/\">hybrid search in TiDB<\/a> and spin up a free cluster to run vector and SQL in a single query.<\/em><\/p>","protected":false},"excerpt":{"rendered":"<p>Editor\u2019s note: This post originally appeared on The New Stack and is republished with permission. The original version is available\u00a0here. A few months ago, one of our users filed a bug report that stuck with me. They had built a customer-support agent on top of a RAG pipeline. A user asked whether they could return [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":33733,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[145],"tags":[460,230,298,111,297],"class_list":["post-33719","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-thought-leadership","tag-hybrid-search","tag-mysql-compatibility","tag-rag","tag-tidb","tag-vector-search"],"acf":[],"featured_image_src":"https:\/\/static.pingcap.com\/files\/2026\/06\/05141334\/Copy-of-Blog-Feature.png","author_info":{"display_name":"Ed Huang","author_link":"https:\/\/www.pingcap.com\/ko\/blog\/author\/ed-huang\/"},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Hybrid Search for RAG: Fix Retrieval Accuracy in AI<\/title>\n<meta name=\"description\" content=\"Hybrid search stops RAG hallucinations by combining vector similarity with SQL filters to ensure accurate, correct retrieval in AI apps.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.pingcap.com\/ko\/blog\/hybrid-search-rag-retrieval-accuracy\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Hybrid Search for RAG: Fix Retrieval Accuracy in AI\" \/>\n<meta property=\"og:description\" content=\"Hybrid search stops RAG hallucinations by combining vector similarity with SQL filters to ensure accurate, correct retrieval in AI apps.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.pingcap.com\/ko\/blog\/hybrid-search-rag-retrieval-accuracy\/\" \/>\n<meta property=\"og:site_name\" content=\"TiDB\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/facebook.com\/pingcap2015\" \/>\n<meta property=\"article:published_time\" content=\"2026-06-04T21:17:56+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-06-05T21:19:41+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/static.pingcap.com\/files\/2026\/06\/05141421\/Copy-of-Blog-LinkedIn.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"627\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Ed Huang\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/static.pingcap.com\/files\/2026\/06\/05141437\/Blog-Twitter-Banner-1.png\" \/>\n<meta name=\"twitter:creator\" content=\"@PingCAP\" \/>\n<meta name=\"twitter:site\" content=\"@PingCAP\" \/>\n<meta name=\"twitter:label1\" content=\"\uae00\uc4f4\uc774\" \/>\n\t<meta name=\"twitter:data1\" content=\"Ed Huang\" \/>\n\t<meta name=\"twitter:label2\" content=\"\uc608\uc0c1 \ub418\ub294 \ud310\ub3c5 \uc2dc\uac04\" \/>\n\t<meta name=\"twitter:data2\" content=\"11\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.pingcap.com\\\/blog\\\/hybrid-search-rag-retrieval-accuracy\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.pingcap.com\\\/blog\\\/hybrid-search-rag-retrieval-accuracy\\\/\"},\"author\":{\"name\":\"Ed Huang\",\"@id\":\"https:\\\/\\\/www.pingcap.com\\\/#\\\/schema\\\/person\\\/e2787ee59fb58fadf52912ddc6e0c7ef\"},\"headline\":\"The Laptop Return that Broke a RAG Pipeline\",\"datePublished\":\"2026-06-04T21:17:56+00:00\",\"dateModified\":\"2026-06-05T21:19:41+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.pingcap.com\\\/blog\\\/hybrid-search-rag-retrieval-accuracy\\\/\"},\"wordCount\":2049,\"publisher\":{\"@id\":\"https:\\\/\\\/www.pingcap.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.pingcap.com\\\/blog\\\/hybrid-search-rag-retrieval-accuracy\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/static.pingcap.com\\\/files\\\/2026\\\/06\\\/05141334\\\/Copy-of-Blog-Feature.png\",\"keywords\":[\"Hybrid Search\",\"MySQL Compatibility\",\"RAG\",\"TiDB\",\"Vector Search\"],\"articleSection\":[\"Thought Leadership\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.pingcap.com\\\/blog\\\/hybrid-search-rag-retrieval-accuracy\\\/\",\"url\":\"https:\\\/\\\/www.pingcap.com\\\/blog\\\/hybrid-search-rag-retrieval-accuracy\\\/\",\"name\":\"Hybrid Search for RAG: Fix Retrieval Accuracy in AI\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.pingcap.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.pingcap.com\\\/blog\\\/hybrid-search-rag-retrieval-accuracy\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.pingcap.com\\\/blog\\\/hybrid-search-rag-retrieval-accuracy\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/static.pingcap.com\\\/files\\\/2026\\\/06\\\/05141334\\\/Copy-of-Blog-Feature.png\",\"datePublished\":\"2026-06-04T21:17:56+00:00\",\"dateModified\":\"2026-06-05T21:19:41+00:00\",\"description\":\"Hybrid search stops RAG hallucinations by combining vector similarity with SQL filters to ensure accurate, correct retrieval in AI apps.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.pingcap.com\\\/blog\\\/hybrid-search-rag-retrieval-accuracy\\\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.pingcap.com\\\/blog\\\/hybrid-search-rag-retrieval-accuracy\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\\\/\\\/www.pingcap.com\\\/blog\\\/hybrid-search-rag-retrieval-accuracy\\\/#primaryimage\",\"url\":\"https:\\\/\\\/static.pingcap.com\\\/files\\\/2026\\\/06\\\/05141334\\\/Copy-of-Blog-Feature.png\",\"contentUrl\":\"https:\\\/\\\/static.pingcap.com\\\/files\\\/2026\\\/06\\\/05141334\\\/Copy-of-Blog-Feature.png\",\"width\":1800,\"height\":600},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.pingcap.com\\\/blog\\\/hybrid-search-rag-retrieval-accuracy\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.pingcap.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"The Laptop Return that Broke a RAG Pipeline\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.pingcap.com\\\/#website\",\"url\":\"https:\\\/\\\/www.pingcap.com\\\/\",\"name\":\"TiDB\",\"description\":\"TiDB | SQL at Scale\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.pingcap.com\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.pingcap.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ko-KR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.pingcap.com\\\/#organization\",\"name\":\"PingCAP\",\"url\":\"https:\\\/\\\/www.pingcap.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\\\/\\\/www.pingcap.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/static.pingcap.com\\\/files\\\/2021\\\/11\\\/pingcap-logo.png\",\"contentUrl\":\"https:\\\/\\\/static.pingcap.com\\\/files\\\/2021\\\/11\\\/pingcap-logo.png\",\"width\":811,\"height\":232,\"caption\":\"PingCAP\"},\"image\":{\"@id\":\"https:\\\/\\\/www.pingcap.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/facebook.com\\\/pingcap2015\",\"https:\\\/\\\/x.com\\\/PingCAP\",\"https:\\\/\\\/linkedin.com\\\/company\\\/pingcap\",\"https:\\\/\\\/youtube.com\\\/channel\\\/UCuq4puT32DzHKT5rU1IZpIA\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.pingcap.com\\\/#\\\/schema\\\/person\\\/e2787ee59fb58fadf52912ddc6e0c7ef\",\"name\":\"Ed Huang\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\\\/\\\/static.pingcap.com\\\/files\\\/2022\\\/10\\\/17234942\\\/avatar.jpg\",\"url\":\"https:\\\/\\\/static.pingcap.com\\\/files\\\/2022\\\/10\\\/17234942\\\/avatar.jpg\",\"contentUrl\":\"https:\\\/\\\/static.pingcap.com\\\/files\\\/2022\\\/10\\\/17234942\\\/avatar.jpg\",\"caption\":\"Ed Huang\"},\"description\":\"Co-Founder and CTO\",\"sameAs\":[\"https:\\\/\\\/www.linkedin.com\\\/in\\\/eddxhuang\\\/\"],\"url\":\"https:\\\/\\\/www.pingcap.com\\\/ko\\\/blog\\\/author\\\/ed-huang\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Hybrid Search for RAG: Fix Retrieval Accuracy in AI","description":"Hybrid search stops RAG hallucinations by combining vector similarity with SQL filters to ensure accurate, correct retrieval in AI apps.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.pingcap.com\/ko\/blog\/hybrid-search-rag-retrieval-accuracy\/","og_locale":"ko_KR","og_type":"article","og_title":"Hybrid Search for RAG: Fix Retrieval Accuracy in AI","og_description":"Hybrid search stops RAG hallucinations by combining vector similarity with SQL filters to ensure accurate, correct retrieval in AI apps.","og_url":"https:\/\/www.pingcap.com\/ko\/blog\/hybrid-search-rag-retrieval-accuracy\/","og_site_name":"TiDB","article_publisher":"https:\/\/facebook.com\/pingcap2015","article_published_time":"2026-06-04T21:17:56+00:00","article_modified_time":"2026-06-05T21:19:41+00:00","og_image":[{"width":1200,"height":627,"url":"https:\/\/static.pingcap.com\/files\/2026\/06\/05141421\/Copy-of-Blog-LinkedIn.png","type":"image\/png"}],"author":"Ed Huang","twitter_card":"summary_large_image","twitter_image":"https:\/\/static.pingcap.com\/files\/2026\/06\/05141437\/Blog-Twitter-Banner-1.png","twitter_creator":"@PingCAP","twitter_site":"@PingCAP","twitter_misc":{"\uae00\uc4f4\uc774":"Ed Huang","\uc608\uc0c1 \ub418\ub294 \ud310\ub3c5 \uc2dc\uac04":"11\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.pingcap.com\/blog\/hybrid-search-rag-retrieval-accuracy\/#article","isPartOf":{"@id":"https:\/\/www.pingcap.com\/blog\/hybrid-search-rag-retrieval-accuracy\/"},"author":{"name":"Ed Huang","@id":"https:\/\/www.pingcap.com\/#\/schema\/person\/e2787ee59fb58fadf52912ddc6e0c7ef"},"headline":"The Laptop Return that Broke a RAG Pipeline","datePublished":"2026-06-04T21:17:56+00:00","dateModified":"2026-06-05T21:19:41+00:00","mainEntityOfPage":{"@id":"https:\/\/www.pingcap.com\/blog\/hybrid-search-rag-retrieval-accuracy\/"},"wordCount":2049,"publisher":{"@id":"https:\/\/www.pingcap.com\/#organization"},"image":{"@id":"https:\/\/www.pingcap.com\/blog\/hybrid-search-rag-retrieval-accuracy\/#primaryimage"},"thumbnailUrl":"https:\/\/static.pingcap.com\/files\/2026\/06\/05141334\/Copy-of-Blog-Feature.png","keywords":["Hybrid Search","MySQL Compatibility","RAG","TiDB","Vector Search"],"articleSection":["Thought Leadership"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/www.pingcap.com\/blog\/hybrid-search-rag-retrieval-accuracy\/","url":"https:\/\/www.pingcap.com\/blog\/hybrid-search-rag-retrieval-accuracy\/","name":"Hybrid Search for RAG: Fix Retrieval Accuracy in AI","isPartOf":{"@id":"https:\/\/www.pingcap.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.pingcap.com\/blog\/hybrid-search-rag-retrieval-accuracy\/#primaryimage"},"image":{"@id":"https:\/\/www.pingcap.com\/blog\/hybrid-search-rag-retrieval-accuracy\/#primaryimage"},"thumbnailUrl":"https:\/\/static.pingcap.com\/files\/2026\/06\/05141334\/Copy-of-Blog-Feature.png","datePublished":"2026-06-04T21:17:56+00:00","dateModified":"2026-06-05T21:19:41+00:00","description":"Hybrid search stops RAG hallucinations by combining vector similarity with SQL filters to ensure accurate, correct retrieval in AI apps.","breadcrumb":{"@id":"https:\/\/www.pingcap.com\/blog\/hybrid-search-rag-retrieval-accuracy\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.pingcap.com\/blog\/hybrid-search-rag-retrieval-accuracy\/"]}]},{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.pingcap.com\/blog\/hybrid-search-rag-retrieval-accuracy\/#primaryimage","url":"https:\/\/static.pingcap.com\/files\/2026\/06\/05141334\/Copy-of-Blog-Feature.png","contentUrl":"https:\/\/static.pingcap.com\/files\/2026\/06\/05141334\/Copy-of-Blog-Feature.png","width":1800,"height":600},{"@type":"BreadcrumbList","@id":"https:\/\/www.pingcap.com\/blog\/hybrid-search-rag-retrieval-accuracy\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.pingcap.com\/"},{"@type":"ListItem","position":2,"name":"The Laptop Return that Broke a RAG Pipeline"}]},{"@type":"WebSite","@id":"https:\/\/www.pingcap.com\/#website","url":"https:\/\/www.pingcap.com\/","name":"\ud2f0DB","description":"TiDB | SQL at Scale","publisher":{"@id":"https:\/\/www.pingcap.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.pingcap.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ko-KR"},{"@type":"Organization","@id":"https:\/\/www.pingcap.com\/#organization","name":"PingCAP","url":"https:\/\/www.pingcap.com\/","logo":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.pingcap.com\/#\/schema\/logo\/image\/","url":"https:\/\/static.pingcap.com\/files\/2021\/11\/pingcap-logo.png","contentUrl":"https:\/\/static.pingcap.com\/files\/2021\/11\/pingcap-logo.png","width":811,"height":232,"caption":"PingCAP"},"image":{"@id":"https:\/\/www.pingcap.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/facebook.com\/pingcap2015","https:\/\/x.com\/PingCAP","https:\/\/linkedin.com\/company\/pingcap","https:\/\/youtube.com\/channel\/UCuq4puT32DzHKT5rU1IZpIA"]},{"@type":"Person","@id":"https:\/\/www.pingcap.com\/#\/schema\/person\/e2787ee59fb58fadf52912ddc6e0c7ef","name":"Ed Huang","image":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/static.pingcap.com\/files\/2022\/10\/17234942\/avatar.jpg","url":"https:\/\/static.pingcap.com\/files\/2022\/10\/17234942\/avatar.jpg","contentUrl":"https:\/\/static.pingcap.com\/files\/2022\/10\/17234942\/avatar.jpg","caption":"Ed Huang"},"description":"Co-Founder and CTO","sameAs":["https:\/\/www.linkedin.com\/in\/eddxhuang\/"],"url":"https:\/\/www.pingcap.com\/ko\/blog\/author\/ed-huang\/"}]}},"grav_blocks":false,"card_markup":"<a class=\"card-resource bg-white\" href=\"https:\/\/www.pingcap.com\/ko\/blog\/hybrid-search-rag-retrieval-accuracy\/\"><div class=\"card-resource__image-container\"><img class=\"card-resource__image\" alt=\"Copy of Blog - Feature\" src=\"https:\/\/static.pingcap.com\/files\/2026\/06\/05141334\/Copy-of-Blog-Feature.png\" loading=\"lazy\" width=1800 height=600 \/><\/div><div class=\"card-resource__content-container\"><div class=\"card-resource__content-head\"><div class=\"card-resource__category\">Thought Leadership<\/div><\/div><h5 class=\"card-resource__title\">The Laptop Return that Broke a RAG Pipeline<\/h5><\/div><\/a>","_links":{"self":[{"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/posts\/33719","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/comments?post=33719"}],"version-history":[{"count":16,"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/posts\/33719\/revisions"}],"predecessor-version":[{"id":33746,"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/posts\/33719\/revisions\/33746"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/media\/33733"}],"wp:attachment":[{"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/media?parent=33719"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/categories?post=33719"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/tags?post=33719"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}