<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>搜索 on Snow</title>
        <link>https://SymphonyW.github.io/zh-cn/tags/%E6%90%9C%E7%B4%A2/</link>
        <description>Recent content in 搜索 on Snow</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-cn</language>
        <copyright>Snow</copyright>
        <lastBuildDate>Fri, 02 Oct 2026 20:13:30 +0800</lastBuildDate><atom:link href="https://SymphonyW.github.io/zh-cn/tags/%E6%90%9C%E7%B4%A2/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>从关键字匹配到向量检索：搜索技术的三条路</title>
        <link>https://SymphonyW.github.io/zh-cn/p/search-matching-retrieval/</link>
        <pubDate>Fri, 02 Oct 2026 20:13:30 +0800</pubDate>
        
        <guid>https://SymphonyW.github.io/zh-cn/p/search-matching-retrieval/</guid>
        <description>&lt;img src="https://SymphonyW.github.io/zh-cn/p/search-matching-retrieval/bg.svg" alt="Featured image of post 从关键字匹配到向量检索：搜索技术的三条路" /&gt;&lt;h1 id=&#34;从关键字匹配到向量检索搜索技术的三条路&#34;&gt;从关键字匹配到向量检索：搜索技术的三条路
&lt;/h1&gt;&lt;blockquote&gt;
&lt;p&gt;搜索系统并不是只有一种做法。&lt;strong&gt;关键字匹配&lt;/strong&gt;擅长找“写出来的词”，&lt;strong&gt;模糊搜索&lt;/strong&gt;擅长救“写错或写不全的词”，&lt;strong&gt;向量检索&lt;/strong&gt;擅长找“意思接近的内容”。到了 RAG 场景，它们往往不是互相替代，而是组合成一条更稳的检索链路。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://SymphonyW.github.io/zh-cn/p/search-matching-retrieval/bg.svg&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;&lt;img src=&#34;https://SymphonyW.github.io/zh-cn/p/search-matching-retrieval/bg.svg&#34; alt=&#34;从关键字匹配到向量检索&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;先用一个例子定调：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;用户真正想问&lt;/th&gt;
&lt;th&gt;输入&lt;/th&gt;
&lt;th&gt;更适合的检索方式&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;查某条明确规则&lt;/td&gt;
&lt;td&gt;&lt;code&gt;退款政策&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;关键字匹配&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;输入有拼写或错别字&lt;/td&gt;
&lt;td&gt;&lt;code&gt;退宽政策&lt;/code&gt; / &lt;code&gt;retun policy&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;模糊搜索&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;说法很口语化&lt;/td&gt;
&lt;td&gt;&lt;code&gt;买了东西后还能不能反悔&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;向量检索&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;要既准又能理解语义&lt;/td&gt;
&lt;td&gt;&lt;code&gt;会员买错套餐怎么退款&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;混合检索 + 重排序&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;a href=&#34;https://SymphonyW.github.io/zh-cn/p/search-matching-retrieval/matching-spectrum.svg&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;&lt;img src=&#34;https://SymphonyW.github.io/zh-cn/p/search-matching-retrieval/matching-spectrum.svg&#34; alt=&#34;三类检索的能力光谱&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;h2 id=&#34;关键字匹配找到字面上出现过的内容&#34;&gt;关键字匹配：找到“字面上出现过”的内容
&lt;/h2&gt;&lt;p&gt;关键字匹配是最经典的信息检索方式。它的核心思想很朴素：把文档切成词，建立索引，查询时看哪些文档包含这些词，再根据词频、字段权重、文档长度等因素排序。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://SymphonyW.github.io/zh-cn/p/search-matching-retrieval/keyword-inverted-index.svg&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;&lt;img src=&#34;https://SymphonyW.github.io/zh-cn/p/search-matching-retrieval/keyword-inverted-index.svg&#34; alt=&#34;关键字匹配与倒排索引&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;搜索引擎、数据库 &lt;code&gt;LIKE&lt;/code&gt; 查询、日志平台、站内搜索、文档系统都大量使用这种思路。工程上最常见的结构是&lt;strong&gt;倒排索引&lt;/strong&gt;：不是从文档找词，而是从词直接找到包含它的文档。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;特点&lt;/th&gt;
&lt;th&gt;说明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;匹配依据&lt;/td&gt;
&lt;td&gt;查询词和文档词项的字面重合&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;常见算法&lt;/td&gt;
&lt;td&gt;TF-IDF、BM25、布尔查询、字段权重&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;优点&lt;/td&gt;
&lt;td&gt;快、稳定、可解释、容易加过滤条件&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;缺点&lt;/td&gt;
&lt;td&gt;不懂同义词和上下文，用户换一种说法就可能搜不到&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;适合&lt;/td&gt;
&lt;td&gt;商品 SKU、订单号、日志关键字、法规条款、代码符号、标题搜索&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;例如用户搜索 &lt;code&gt;redis setnx&lt;/code&gt;，关键字检索非常合适，因为这个词本身就是准确术语；如果用户搜索 &lt;code&gt;如何防止重复下单&lt;/code&gt;，纯关键字系统就可能漏掉只写了 &lt;code&gt;幂等&lt;/code&gt;、&lt;code&gt;分布式锁&lt;/code&gt; 的文章。&lt;/p&gt;
&lt;h2 id=&#34;模糊搜索解决写错了也要搜到&#34;&gt;模糊搜索：解决“写错了也要搜到”
&lt;/h2&gt;&lt;p&gt;模糊搜索仍然是词面检索，只是比关键字匹配宽容一点。它关注的是：用户输入和真实词项&lt;strong&gt;长得像不像&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://SymphonyW.github.io/zh-cn/p/search-matching-retrieval/fuzzy-search-flow.svg&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;&lt;img src=&#34;https://SymphonyW.github.io/zh-cn/p/search-matching-retrieval/fuzzy-search-flow.svg&#34; alt=&#34;模糊搜索的候选生成与排序&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;常见手段包括：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;技术&lt;/th&gt;
&lt;th&gt;解决的问题&lt;/th&gt;
&lt;th&gt;例子&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;编辑距离&lt;/td&gt;
&lt;td&gt;少字、多字、错字、相邻字母颠倒&lt;/td&gt;
&lt;td&gt;&lt;code&gt;retun&lt;/code&gt; → &lt;code&gt;return&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;n-gram / trigram&lt;/td&gt;
&lt;td&gt;子串相似、短文本近似匹配&lt;/td&gt;
&lt;td&gt;&lt;code&gt;microserv&lt;/code&gt; → &lt;code&gt;microservice&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;前缀匹配&lt;/td&gt;
&lt;td&gt;搜索建议、自动补全&lt;/td&gt;
&lt;td&gt;&lt;code&gt;kuber&lt;/code&gt; → &lt;code&gt;kubernetes&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;拼音/同音纠错&lt;/td&gt;
&lt;td&gt;中文输入法误差&lt;/td&gt;
&lt;td&gt;&lt;code&gt;shiliangjiansuo&lt;/code&gt; → &lt;code&gt;向量检索&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;同义词词典&lt;/td&gt;
&lt;td&gt;人工维护近义表达&lt;/td&gt;
&lt;td&gt;&lt;code&gt;售后&lt;/code&gt; ≈ &lt;code&gt;退货&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;它最适合搜索框体验：用户没有输入完整词、英文拼错、中文有错别字、商品名只记得一半。Elasticsearch、OpenSearch、Solr、PostgreSQL trigram、Algolia 这类系统里都有对应能力。&lt;/p&gt;
&lt;p&gt;但要注意，模糊搜索的本质不是“理解语义”。&lt;code&gt;退款&lt;/code&gt; 和 &lt;code&gt;退货&lt;/code&gt; 语义相关，但字面未必相似；&lt;code&gt;苹果手机&lt;/code&gt; 和 &lt;code&gt;iPhone&lt;/code&gt; 字面差异很大，靠编辑距离很难自然匹配。模糊搜索放宽召回后，还会带来误匹配，所以需要阈值、字段权重、热度、点击率等信号做排序。&lt;/p&gt;
&lt;h2 id=&#34;向量检索找到意思接近的内容&#34;&gt;向量检索：找到“意思接近”的内容
&lt;/h2&gt;&lt;p&gt;向量检索会先用 Embedding 模型把文本、图片、音频等内容转成一串数字。语义相近的内容，在向量空间里的距离也更近。查询时，系统把用户问题也转成向量，再找距离最近的内容。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://SymphonyW.github.io/zh-cn/p/search-matching-retrieval/vector-rag-flow.svg&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;&lt;img src=&#34;https://SymphonyW.github.io/zh-cn/p/search-matching-retrieval/vector-rag-flow.svg&#34; alt=&#34;向量检索与 RAG 流程&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;这就是很多 RAG 系统的检索底座：先从知识库中召回相关片段，再把片段塞进 Prompt，让大模型基于资料回答。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;特点&lt;/th&gt;
&lt;th&gt;说明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;匹配依据&lt;/td&gt;
&lt;td&gt;Embedding 空间里的语义相似度&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;常见索引&lt;/td&gt;
&lt;td&gt;HNSW、IVF、PQ、DiskANN&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;常见度量&lt;/td&gt;
&lt;td&gt;余弦相似度、内积、欧氏距离&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;优点&lt;/td&gt;
&lt;td&gt;能处理同义表达、口语化问题、跨语言/跨模态相似&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;缺点&lt;/td&gt;
&lt;td&gt;成本更高，可解释性弱，精确过滤和强约束不如传统检索&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;适合&lt;/td&gt;
&lt;td&gt;知识库问答、相似文章、相似图片、推荐、智能客服、代码语义搜索&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;比如文档里写的是：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;用户在订单完成后的 7 天内，可申请无理由退货。
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;用户问：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;买完后不想要了还能退吗？
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;关键字匹配可能只看到 &lt;code&gt;买完&lt;/code&gt;、&lt;code&gt;不想要&lt;/code&gt;，命中不稳定；向量检索更容易把它和 &lt;code&gt;退货&lt;/code&gt;、&lt;code&gt;订单完成后&lt;/code&gt;、&lt;code&gt;7 天内&lt;/code&gt; 这些语义相关片段拉近。&lt;/p&gt;
&lt;p&gt;向量检索也不是银弹。它对&lt;strong&gt;数字、版本号、专有名词、权限过滤、精确字段&lt;/strong&gt;并不天然可靠。问 &lt;code&gt;HTTP 451&lt;/code&gt;、&lt;code&gt;订单 202610020001&lt;/code&gt;、&lt;code&gt;Go 1.22&lt;/code&gt; 这类问题时，关键字和结构化过滤往往更可信。&lt;/p&gt;
&lt;h2 id=&#34;它们到底差在哪&#34;&gt;它们到底差在哪
&lt;/h2&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;维度&lt;/th&gt;
&lt;th&gt;关键字匹配&lt;/th&gt;
&lt;th&gt;模糊搜索&lt;/th&gt;
&lt;th&gt;向量检索&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;关注点&lt;/td&gt;
&lt;td&gt;词是否出现&lt;/td&gt;
&lt;td&gt;词是否相似&lt;/td&gt;
&lt;td&gt;意思是否接近&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;用户输入&lt;/td&gt;
&lt;td&gt;明确、短、术语化&lt;/td&gt;
&lt;td&gt;有错字、缩写、前缀&lt;/td&gt;
&lt;td&gt;口语化、描述性、长问题&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;召回能力&lt;/td&gt;
&lt;td&gt;精确但可能漏&lt;/td&gt;
&lt;td&gt;比关键字更宽&lt;/td&gt;
&lt;td&gt;语义召回强&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;排序可解释性&lt;/td&gt;
&lt;td&gt;强&lt;/td&gt;
&lt;td&gt;中等&lt;/td&gt;
&lt;td&gt;弱，需要额外解释&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;延迟与成本&lt;/td&gt;
&lt;td&gt;低&lt;/td&gt;
&lt;td&gt;中&lt;/td&gt;
&lt;td&gt;中到高&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;典型工具&lt;/td&gt;
&lt;td&gt;MySQL、Lucene、Elasticsearch BM25&lt;/td&gt;
&lt;td&gt;Elasticsearch fuzzy、trigram、Algolia&lt;/td&gt;
&lt;td&gt;FAISS、Milvus、Qdrant、Pinecone、Weaviate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;常见问题&lt;/td&gt;
&lt;td&gt;同义词搜不到&lt;/td&gt;
&lt;td&gt;误匹配变多&lt;/td&gt;
&lt;td&gt;召回噪声、Embedding 漂移、难调参&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;可以把它们理解成三层：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;关键字匹配：你说了 A，我找 A
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;模糊搜索：你大概写的是 A，我帮你找 A
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;向量检索：你说的是 A 的意思，我找和 A 意思接近的内容
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;经典应用&#34;&gt;经典应用
&lt;/h2&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;场景&lt;/th&gt;
&lt;th&gt;推荐方案&lt;/th&gt;
&lt;th&gt;为什么&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;日志检索&lt;/td&gt;
&lt;td&gt;关键字 + 时间/服务过滤&lt;/td&gt;
&lt;td&gt;错一个字符都可能代表不同错误码，精确性优先&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;电商搜索&lt;/td&gt;
&lt;td&gt;关键字 + 模糊搜索 + 向量召回&lt;/td&gt;
&lt;td&gt;商品名要准，用户输入也常常不完整，还需要语义推荐&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;代码搜索&lt;/td&gt;
&lt;td&gt;符号索引 + 关键字 + 语义向量&lt;/td&gt;
&lt;td&gt;函数名要精确，需求描述又可能很口语&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;企业知识库问答&lt;/td&gt;
&lt;td&gt;向量检索 + BM25 + 重排序 + RAG&lt;/td&gt;
&lt;td&gt;需要理解问题、召回资料、生成答案并引用来源&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;图片以图搜图&lt;/td&gt;
&lt;td&gt;向量检索&lt;/td&gt;
&lt;td&gt;图像相似度很难靠关键字解决&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;站内帮助中心&lt;/td&gt;
&lt;td&gt;关键字 + 模糊 + 同义词 + 向量&lt;/td&gt;
&lt;td&gt;用户可能输入术语，也可能输入自然语言问题&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;最典型的例子是企业知识库 RAG。用户不会严格复述文档标题，而是问“这笔报销为什么被驳回”“试用期请病假怎么算”“客户要求删数据怎么办”。系统通常会先做权限过滤，再用 BM25 和向量各召回一批候选，最后重排序，选少量片段交给大模型回答。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://SymphonyW.github.io/zh-cn/p/search-matching-retrieval/hybrid-ranking.svg&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;&lt;img src=&#34;https://SymphonyW.github.io/zh-cn/p/search-matching-retrieval/hybrid-ranking.svg&#34; alt=&#34;混合检索流水线&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;h2 id=&#34;实战选型不要急着三选一&#34;&gt;实战选型：不要急着三选一
&lt;/h2&gt;&lt;p&gt;&lt;a href=&#34;https://SymphonyW.github.io/zh-cn/p/search-matching-retrieval/decision-map.svg&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;&lt;img src=&#34;https://SymphonyW.github.io/zh-cn/p/search-matching-retrieval/decision-map.svg&#34; alt=&#34;搜索技术选型速查图&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;一个实用的判断方式：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;你遇到的问题&lt;/th&gt;
&lt;th&gt;优先考虑&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;用户会输入订单号、错误码、函数名、固定术语&lt;/td&gt;
&lt;td&gt;关键字匹配&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;用户经常拼错、少打、只输入前几个字&lt;/td&gt;
&lt;td&gt;模糊搜索&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;用户用自然语言描述需求，文档表达方式又不固定&lt;/td&gt;
&lt;td&gt;向量检索&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;既要精确过滤，又要语义理解，还要给 LLM 喂资料&lt;/td&gt;
&lt;td&gt;混合检索&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;生产系统里更常见的是组合拳：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;结构化过滤&lt;/strong&gt;：先按权限、租户、时间、类目过滤，避免召回不该看的内容。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;关键字召回&lt;/strong&gt;：用 BM25 保住精确术语、标题、编号、实体名。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;向量召回&lt;/strong&gt;：补足同义表达、口语化问题和长文本语义。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;融合排序&lt;/strong&gt;：用 RRF 或加权分数合并两路候选。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;重排序&lt;/strong&gt;：用 cross-encoder、LLM reranker 或业务规则做精排。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;生成回答&lt;/strong&gt;：RAG 场景只把最相关、最可信、来源清楚的片段交给 LLM。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;一个容易记住的结论&#34;&gt;一个容易记住的结论
&lt;/h2&gt;&lt;p&gt;关键字匹配解决的是&lt;strong&gt;有没有这个词&lt;/strong&gt;，模糊搜索解决的是&lt;strong&gt;这个词是不是写歪了&lt;/strong&gt;，向量检索解决的是&lt;strong&gt;这句话大概在说什么&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;如果你在做一个普通搜索框，先把关键字、分词、字段权重和模糊纠错做好；如果你在做知识库问答或智能客服，再引入向量检索和 RAG；如果你在做面向真实用户的生产系统，最终大概率会走向混合检索。因为用户既会输入精确编号，也会说一大段含糊的话，而好的搜索系统要同时接得住这两种输入。&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
