资讯动态

DM9 RAG多路召回:关系+全文+向量混合检索实现

发布时间:2026/9/8 17:46:38 来源:尧图企业网站定制
文章目录每日一句正能量摘要一、引言RAG的召回困境二、DM9混合检索架构总览2.1 传统RAG vs DM9 RAG2.2 DM9多路召回的三条路径三、精确召回结构化条件的B树过滤3.1 B树索引原理3.2 DM9精确召回SQL示例3.3 精确召回的优化技巧四、关键词召回全文检索的GIN索引4.1 全文检索原理4.2 中文分词与tsvector4.3 关键词召回的高级用法五、语义召回向量相似度的HNSW索引5.1 向量语义检索原理5.2 DM9向量检索SQL六、三路融合一条SQL完成多路召回6.1 融合排序策略6.2 DM9多路召回SQL实现6.3 查询优化器的智能调度七、实战企业知识库RAG系统7.1 表结构设计7.2 数据插入与向量生成7.3 RAG检索查询八、性能优化与调优8.1 索引优化8.2 查询参数调优8.3 性能监控九、总结与展望每日一句正能量终于明白快乐是选择不是结果。而真正的快乐是一种当下的能力在阴天选择看见云层的纹路在人群中选择听见自己的心跳。它不依附于任何条件只是内心角度的转动。摘要摘要RAG检索增强生成应用的核心瓶颈在于召回质量——如何在海量数据中精准找到与大模型提问最相关的知识片段。单一检索路径纯向量或纯关键词往往顾此失彼向量检索擅长语义相似但可能漏掉关键属性约束关键词检索精确但无法理解同义词和语义变体。达梦DM9通过关系全文向量三路并行召回将精确条件匹配、关键词检索与语义检索融为一体配合查询优化器的智能调度在单次SQL中完成多路召回与融合排序。本文从RAG召回原理、DM9混合检索架构、实战SQL实现三个维度深度解析如何用一条SQL构建企业级RAG检索引擎。一、引言RAG的召回困境大模型应用落地的核心挑战之一是如何让模型说对话——不 hallucinate幻觉、不胡编乱造。RAGRetrieval-Augmented Generation检索增强生成是目前最主流的解决方案用户提问时先从知识库中检索相关知识再将检索结果注入Prompt引导大模型基于事实生成回答。然而RAG的召回环节存在一个根本性矛盾纯向量检索的问题无法理解关键词的精确匹配需求如2026年、“北京分公司”对专有名词、型号、ID等精确标识的召回率低向量相似度≠语义相关度容易召回形似神不似的结果纯关键词检索的问题无法理解同义词和语义变体“智能手表≠运动手环”对长尾查询和口语化表达效果差缺乏语义理解能力召回结果往往词对词而非意对意多路召回的价值同时从精确条件、关键词匹配、语义相似三个维度召回候选取并集后融合排序兼顾精确性和语义理解能力。达梦DM9的破局方案是在一个SQL查询中同时执行关系型过滤、全文检索和向量相似度计算由查询优化器自动选择最优执行路径。二、DM9混合检索架构总览2.1 传统RAG vs DM9 RAG传统RAG架构需要多套系统拼凑向量数据库负责语义检索关系数据库负责属性过滤搜索引擎负责关键词匹配。应用层需要分别调用三个系统再手动合并结果。这种架构的问题在于数据同步延迟、跨系统调用开销大、结果合并复杂。DM9 RAG架构则完全不同用户提问后Embedding模型生成查询向量同时关系条件和全文关键词作为过滤条件所有信息在DM9单库中通过一条SQL完成三路召回天然具备ACID一致性。2.2 DM9多路召回的三条路径召回路径技术实现核心能力适用场景精确召回B树索引 WHERE条件结构化属性精确过滤时间范围、分类、状态、ID关键词召回GIN全文索引 tsquery关键词匹配、短语检索产品名称、文档标题、标签语义召回HNSW向量索引 余弦距离语义相似度、同义词理解概念相似、语义相近、以图搜图三条路径共享同一套事务引擎查询结果天然一致无需担心数据同步问题。三、精确召回结构化条件的B树过滤精确召回基于关系型数据库的B树索引通过WHERE条件对结构化属性进行精确过滤。这是三路召回中效率最高的一条路径通常在毫秒级完成。3.1 B树索引原理B树索引将数据按主键或索引键有序组织查询时通过树形结构快速定位目标数据时间复杂度为O(log N)。对于范围查询BETWEEN、、和等值查询B树索引能提供极高的查询效率。3.2 DM9精确召回SQL示例-- 场景在技术规范分类中找出2026年发布的文档SELECTdoc_id,title,contentFROMknowledge_baseWHEREdoc_type技术规范-- 精确匹配文档类型ANDcreate_time2026-01-01-- 范围过滤创建时间ANDcreate_time2027-01-01ANDstatus已发布-- 状态过滤ANDdepartment架构部;-- 部门过滤-- 执行计划B树索引快速定位-- Index Scan using idx_doc_type on knowledge_base-- Index Cond: doc_type 技术规范-- Filter: (create_time 2026-01-01) AND (status 已发布)3.3 精确召回的优化技巧-- 复合索引按查询频率最高的列在前排序CREATEINDEXidx_kb_filterONknowledge_base(doc_type,status,department,create_time);-- 分区表按时间分区加速范围查询CREATETABLEknowledge_base(doc_idINTPRIMARYKEY,titleVARCHAR(500),contentTEXT,doc_typeVARCHAR(50),create_timeTIMESTAMP,statusVARCHAR(20),departmentVARCHAR(50))PARTITIONBYRANGE(create_time)(PARTITIONp2024VALUESLESS THAN(2025-01-01),PARTITIONp2025VALUESLESS THAN(2026-01-01),PARTITIONp2026VALUESLESS THAN(2027-01-01));四、关键词召回全文检索的GIN索引4.1 全文检索原理DM9的全文检索基于GINGeneralized Inverted Index通用倒排索引将文档内容分词后建立倒排列表。查询时将查询词分词后在倒排列表中查找包含这些词的文档返回匹配结果。4.2 中文分词与tsvector-- 创建全文检索索引中文分词CREATEINDEXidx_kb_fulltextONknowledge_baseUSINGgin(to_tsvector(chinese,title|| ||content));-- 关键词召回查询SELECTdoc_id,title,ts_rank(to_tsvector(chinese,title|| ||content),plainto_tsquery(chinese,数据库 容灾))ASrankFROMknowledge_baseWHEREto_tsvector(chinese,title|| ||content) plainto_tsquery(chinese,数据库 容灾)ORDERBYrankDESCLIMIT20;4.3 关键词召回的高级用法DM9全文检索支持短语匹配、逻辑组合和权重设置。例如短语匹配可精确匹配数据安全这个短语逻辑组合可实现包含数据库且包含容灾但不包含Oracle的复杂查询权重设置可让标题匹配的权重高于内容匹配。五、语义召回向量相似度的HNSW索引5.1 向量语义检索原理向量语义检索将文本转换为高维向量通常768维或更高通过计算向量间的余弦相似度来衡量语义相似度。HNSWHierarchical Navigable Small World索引通过构建多层图结构将O(N)的暴力搜索优化到O(log N)。5.2 DM9向量检索SQL-- 创建向量表CREATETABLEdoc_embeddings(doc_idINTPRIMARYKEY,embedding VECTOR(768));-- 创建HNSW索引CREATEINDEXidx_doc_hnswONdoc_embeddingsUSINGhnsw(embedding vector_cosine_ops)WITH(m16);-- 语义召回找出与查询语义最相似的Top-10文档SELECTd.doc_id,kb.title,cosine_distance(d.embedding,query_vec)ASdistanceFROMdoc_embeddings d,(SELECTvector_from_text(数据库容灾方案)ASquery_vec)q,knowledge_base kbWHEREd.doc_idkb.doc_idORDERBYd.embeddingquery_vecLIMIT10;六、三路融合一条SQL完成多路召回6.1 融合排序策略三路召回的结果需要融合排序。常见的融合策略包括融合策略公式适用场景加权求和score w1×精确 w2×关键词 w3×语义通用场景权重可调倒数排名融合RRFscore Σ 1/(k rank_i)多路结果排名差异大最大值归一化score max(score_i)突出单路最佳结果6.2 DM9多路召回SQL实现-- 场景在技术规范分类中搜索与数据库容灾相关的文档WITH-- 查询向量和关键词query_paramsAS(SELECTvector_from_text(数据库容灾方案)ASquery_vec,plainto_tsquery(chinese,数据库 容灾)ASquery_ts),-- 路径1精确召回结构化过滤exact_recallAS(SELECTkb.doc_id,kb.title,kb.content,1.0ASexact_scoreFROMknowledge_base kb,query_params qpWHEREkb.doc_type技术规范ANDkb.status已发布ANDkb.create_time2026-01-01),-- 路径2关键词召回全文检索keyword_recallAS(SELECTkb.doc_id,kb.title,kb.content,ts_rank(to_tsvector(chinese,kb.title|| ||kb.content),qp.query_ts)ASkeyword_scoreFROMknowledge_base kb,query_params qpWHEREto_tsvector(chinese,kb.title|| ||kb.content) qp.query_ts),-- 路径3语义召回向量相似度semantic_recallAS(SELECTd.doc_id,kb.title,kb.content,(1-cosine_distance(d.embedding,qp.query_vec))ASsemantic_scoreFROMdoc_embeddings dJOINknowledge_base kbONd.doc_idkb.doc_idCROSSJOINquery_params qpORDERBYd.embeddingqp.query_vecLIMIT50)-- 融合三路召回结果SELECTCOALESCE(e.doc_id,k.doc_id,s.doc_id)ASdoc_id,COALESCE(e.title,k.title,s.title)AStitle,LEFT(COALESCE(e.content,k.content,s.content),200)AScontent_preview,-- 加权融合分数可调整权重COALESCE(e.exact_score,0)*0.3COALESCE(k.keyword_score,0)*0.3COALESCE(s.semantic_score,0)*0.4ASfusion_scoreFROMexact_recall eFULLOUTERJOINkeyword_recall kONe.doc_idk.doc_idFULLOUTERJOINsemantic_recall sONCOALESCE(e.doc_id,k.doc_id)s.doc_idORDERBYfusion_scoreDESCLIMIT10;6.3 查询优化器的智能调度DM9的查询优化器会自动选择最优执行计划先过滤后检索先用B树索引过滤掉90%数据全文索引加速在剩余数据中通过GIN索引快速定位关键词向量索引精准仅对经过前两轮过滤的少量数据执行HNSW向量相似度计算-- 查看执行计划EXPLAINANALYZESELECT...FROMknowledge_base kbWHEREkb.doc_type技术规范-- B树索引ANDto_tsvector(chinese,kb.content)-- GIN全文索引 plainto_tsquery(chinese,数据库容灾)ORDERBYkb.embeddingquery_vec-- HNSW向量索引LIMIT10;-- 执行计划关键信息-- Limit (cost100.00..120.50 rows10)-- - Sort (cost100.00..110.00 rows1000)-- Sort Key: (embedding query_vec)-- - BitmapAnd-- - Bitmap Index Scan using idx_doc_type -- B树-- - Bitmap Index Scan using idx_kb_fulltext -- GIN-- - Index Scan using idx_doc_hnsw -- HNSW七、实战企业知识库RAG系统7.1 表结构设计-- 知识库主表CREATETABLEenterprise_kb(doc_idSERIALPRIMARYKEY,titleVARCHAR(500),contentTEXT,authorVARCHAR(100),departmentVARCHAR(50),doc_typeVARCHAR(30),-- 合同/规范/通知/FAQstatusVARCHAR(20),-- 草稿/已发布/已归档create_timeTIMESTAMPDEFAULTCURRENT_TIMESTAMP,update_timeTIMESTAMPDEFAULTCURRENT_TIMESTAMP,tags JSON,-- {priority: high, project: AI}content_vec VECTOR(768)-- 文本语义向量);-- 创建多路召回所需索引CREATEINDEXidx_kb_typeONenterprise_kb(doc_type);CREATEINDEXidx_kb_statusONenterprise_kb(status);CREATEINDEXidx_kb_deptONenterprise_kb(department);CREATEINDEXidx_kb_timeONenterprise_kb(create_time);CREATEINDEXidx_kb_fulltextONenterprise_kbUSINGgin(to_tsvector(chinese,title|| ||content));CREATEINDEXidx_kb_hnswONenterprise_kbUSINGhnsw(content_vec vector_cosine_ops)WITH(m16);7.2 数据插入与向量生成-- 插入知识文档并自动生成向量INSERTINTOenterprise_kb(title,content,author,department,doc_type,status,content_vec)VALUES(DM9多租户隔离技术规范,DM9采用内核级租户隔离机制通过资源组实现CPU、内存、IO的精细化管控...,张三,架构部,技术规范,已发布,dm9_embedding(DM9多租户隔离技术规范 DM9采用内核级租户隔离机制...));7.3 RAG检索查询-- 场景架构部员工搜索租户资源隔离相关文档WITHquery_paramsAS(SELECTvector_from_text(租户资源隔离)ASquery_vec,plainto_tsquery(chinese,租户 | 隔离 | 资源)ASquery_ts),-- 精确召回架构部、已发布、技术规范exact_recallAS(SELECTdoc_id,title,content,1.0ASexact_scoreFROMenterprise_kbWHEREdepartment架构部ANDstatus已发布ANDdoc_type技术规范),-- 关键词召回keyword_recallAS(SELECTdoc_id,title,content,ts_rank(to_tsvector(chinese,title|| ||content),qp.query_ts)ASkeyword_scoreFROMenterprise_kb,query_params qpWHEREto_tsvector(chinese,title|| ||content) qp.query_ts),-- 语义召回semantic_recallAS(SELECTdoc_id,title,content,(1-cosine_distance(content_vec,qp.query_vec))ASsemantic_scoreFROMenterprise_kb,query_params qpORDERBYcontent_vecqp.query_vecLIMIT20)-- 融合排序SELECTCOALESCE(e.doc_id,k.doc_id,s.doc_id)ASdoc_id,COALESCE(e.title,k.title,s.title)AStitle,LEFT(COALESCE(e.content,k.content,s.content),150)ASpreview,COALESCE(e.exact_score,0)*0.25COALESCE(k.keyword_score,0)*0.35COALESCE(s.semantic_score,0)*0.4ASfusion_scoreFROMexact_recall eFULLOUTERJOINkeyword_recall kUSING(doc_id)FULLOUTERJOINsemantic_recall sUSING(doc_id)ORDERBYfusion_scoreDESCLIMIT5;八、性能优化与调优8.1 索引优化-- 复合索引覆盖多路召回的过滤条件CREATEINDEXidx_kb_multiONenterprise_kb(doc_type,status,department,create_time);-- 分区表按时间分区加速范围查询CREATETABLEenterprise_kb(...)PARTITIONBYRANGE(create_time);-- 向量索引参数调优CREATEINDEXidx_kb_hnswONenterprise_kbUSINGhnsw(content_vec vector_cosine_ops)WITH(m32,ef_construction200);-- 更高精度更大内存8.2 查询参数调优-- 设置HNSW搜索宽度平衡精度和速度SEThnsw.ef_search100;-- 设置全文检索的nprobe平衡召回率和速度SETivfflat.probes10;8.3 性能监控-- 查看索引使用情况SELECTschemaname,tablename,indexname,idx_scan,idx_tup_readFROMpg_stat_user_indexesWHEREtablenameenterprise_kbORDERBYidx_scanDESC;-- 查看慢查询SELECTquery,mean_exec_time,callsFROMpg_stat_statementsWHEREqueryLIKE%enterprise_kb%ORDERBYmean_exec_timeDESCLIMIT10;九、总结与展望达梦DM9的RAG多路召回方案通过关系全文向量三路并行召回解决了单一检索路径的局限性精确召回确保关键属性约束不被遗漏B树索引毫秒级完成过滤关键词召回利用GIN全文索引实现精确关键词匹配支持中文分词和逻辑组合语义召回通过HNSW向量索引理解语义相似度召回同义词和语义变体核心优势单库完成一条SQL完成三路召回无需跨系统调用天然一致共享事务引擎数据一致性由ACID保证智能调度查询优化器自动选择最优执行路径灵活可调权重、索引、参数均可根据业务场景调整随着达梦Fusion AI计划的推进DM9还将引入库内AI推理、数据语义检索、xPU加速等能力进一步降低RAG应用的开发和运维门槛。作者注本文基于达梦DM9公开技术资料、官方白皮书以及DTCC 2026演讲内容撰写深入解析了DM9 RAG多路召回的技术原理和实现机制。文中SQL示例基于DM9语法实际部署请参考官方最新文档。标签#达梦数据库 #达梦同行者征文 #DM9 #RAG #多路召回 #混合检索 #向量检索转载自https://blog.csdn.net/u014727709/article/details/164624423欢迎 点赞✍评论⭐收藏欢迎指正

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价