政策快报平台全文检索的3次升级:从ES到向量检索
政策快报平台上线时搜索功能是基于Elasticsearch的关键词匹配。用户搜“专精特新”只能搜到标题或正文里包含“专精特新”这四个字的政策。但很多相关的政策叫“小巨人企业培育”“隐形冠军认定”跟“专精特新”说的是同一件事但搜不出来。用户搜“补贴”只能搜到标题里带“补贴”二字的政策但很多政策叫“专项资金”“后补助”“奖励资金”用户搜不到。关键词匹配只能解决“字面相同”的问题解决不了“意思相同”的问题。后来我们做了3次升级把搜索从“关键词匹配”升级到了“语义理解”。搜索准确率从65%提升到了89%。今天复盘这3次升级的思考。3次升级第一次升级同义词词典从“字面匹配”到“词义扩展”在ES之上加了一层同义词扩展。用户搜索时系统自动把搜索词扩展成一组同义词再交给ES查询。示例搜“专精特新” → 自动扩展为“专精特新 OR 小巨人 OR 隐形冠军 OR 单项冠军”搜“补贴” → 自动扩展为“补贴 OR 补助 OR 专项资金 OR 后补助 OR 奖励”效果搜索命中率提升了约20%用户搜到相关政策的概率明显提高。局限同义词覆盖不全。新词、生僻词、组合词无法及时补充。比如“新质生产力”这个词出来之后同义词词典还没来得及更新用户搜“新质生产力”还是搜不到相关文件。第二次升级向量检索从“词义扩展”到“语义理解”引入向量检索。将用户查询和政策文本分别通过Sentence-BERT模型编码为向量计算余弦相似度按相似度排序返回结果。优势不依赖同义词词典模型自动学习语义关系搜“专精特新”能匹配“小巨人”“隐形冠军”搜“中小企业支持政策”能匹配“小微企业扶持措施”搜“研发费用优惠”能匹配“研发费用加计扣除”效果搜索准确率从65%提升到了82%。用户搜不到的情况大幅减少。新问题向量检索擅长语义泛化但有时过于“发散”。用户搜一个精确的政策名称时如“国发〔2026〕1号”向量检索反而会匹配到一堆语义相似但不相关的文件精确匹配能力不如ES。第三次升级混合检索ES 向量检索ES擅长精确匹配向量检索擅长语义理解。两者结合取长补短。混合策略用户搜索时系统同时执行ES查询和向量检索ES负责精确匹配政策名称、发文字号、特定关键词向量检索负责语义泛化同义词、近义词、相关概念两种得分按权重融合得出最终排序权重分配依据精确查询含发文字号、完整政策名称 → ES权重提高向量权重降低模糊查询行业词、概念词 → ES权重降低向量权重提高效果搜索准确率从82%提升到了89%精确匹配和语义泛化得到了平衡。技术架构text复制下载用户查询 ↓ 查询意图判断精确or模糊 ↓ ├─ 精确查询 → ES全文检索BM25 └─ 模糊查询 → 向量检索Sentence-BERT ↓ 结果融合与重排序 ↓ 返回最终结果几点经验总结第一同义词词典虽然不如向量检索“智能”但实现简单、成本低、可控性强在初期阶段依然有价值。同义词词典ES也可以解决大部分问题不必一开始就追求向量检索。第二向量检索解决的是“语义泛化”问题但它引入了一个新的问题精确匹配能力下降。混合架构是更务实的方案而不是单一技术路线。第三搜索系统的准确率提升往往是多个优化叠加的结果而不是某一个“神器”的功劳。同义词扩展提升了10%向量检索又提升了10%混合检索再提升了5%——叠加在一起才从65%到了89%。结尾从ES到同义词、从同义词到向量、从向量到混合检索——每一步都解决了当时的主要问题也为下一步的优化留出了空间。