一句话定义:关键词搜索是把查询拆成词,去文档里比对字面是否出现;语义搜索是把查询和文档都映射成向量(embedding),比较向量之间的距离,找“意思相近”的内容。
两种搜索在做什么
关键词搜索的底层是倒排索引(inverted index):先给每篇文档建一张“词 → 出现位置”的表,查询时把用户输入切词、去停用词,再按词项匹配(term matching)打分。经典算法如 AI 词典:TF-IDF">TF-IDF、BM25 都属于这一类,思路是“这个词在本文档里出现得多、在整个语料里少见,就更相关”。它的优点是精确、可解释、快,用户搜“iPhone 15 电池容量”,只要文档里有这几个词就能命中。
语义搜索走的是另一条路。它用模型把句子压成一串数字(向量),语义相近的句子在向量空间里距离更近。用户搜“手机续航不行怎么办”,即使文档里从没出现“续航”二字,只要讲的是“电池掉电快”,向量距离依然很近,就能被召回。衡量距离常用余弦相似度(cosine similarity)。
打个比方:关键词搜索像在图书馆按书名和目录卡片找书,卡片上写什么字就只能按什么字找;语义搜索像一位读过所有书的馆员,你说“我想找本讲人怎么面对失败的书”,他能给你拿来一本标题里根本没有“失败”二字的书。
关键区别
| 维度 | 关键词搜索 | 语义搜索 |
|---|---|---|
| 匹配依据 | 词项字面出现 | 向量相似度 |
| 擅长 | 精确名词、型号、编号、人名 | 口语化描述、同义改写、跨语言 |
| 短板 | 换个说法就搜不到;同义词要人工配 | 对精确串不敏感;易“看起来像但不对” |
| 可解释性 | 高,能说清命中哪几个词 | 较低,只能给出相似度分数 |
| 更新成本 | 增量建索引便宜 | 文档改动需重新编码入库 |
混淆会出什么问题
最常见的误区是以为“上了向量库就等于搜得准”。实际工程里两类失败很典型:
一是召回阶段用错方法。用户搜订单号、报错码、产品型号这种“必须逐字对上”的查询,语义模型反而会把相邻型号混为一谈——搜 A1023 召回 A1032,对业务是灾难。这类查询应当保留词项过滤或精确匹配。
二是精度阶段没人管。语义召回把“意思沾边”的都捞回来了,但排序不行,用户前几条看到的是泛泛而谈的文章。常见做法是两段式:向量召回(recall)负责“不漏”,再用交叉编码器(cross-encoder)或业务规则做精排(rerank)负责“不滥”。
三是拿关键词指标评估语义系统。用“是否包含查询词”判断相关性,语义搜索天然吃亏;反过来只用相似度分数,又会放过语义漂移的结果。评估集要人工标注意图相关性,且以业务页面的实际数据为准。
对从业者和普通职场人的意义
对做 RAG(检索增强生成)的人:检索质量决定回答质量,别只调提示词。混合检索(hybrid search,向量 + BM25 加权融合)在多数场景比单一路线稳,具体权重需要在自己的数据上试,不要照搬别人的参数。
对普通职场人:当你在搜索框里怎么换词都搜不到想要的东西,往往不是你的问题,而是系统只做了字面匹配;反过来,如果搜一个精确编号却返回一堆“差不多”的结果,那是纯语义检索缺了约束。理解这一点,提需求时就能说清“我要的是找得全,还是找得准”。
