核心要点

  • 别只做关键词:用「语义搜索embedding 召回)+ 关键词(BM25)」混合检索召回率和精度都更高

  • 搜索框体验靠「搜索建议/自动补全」:用前缀匹配 + 热门 query,输入时实时下拉提示

  • 想再提精度,召回后加一层 rerank(重排模型)对 Top-K 重新打分,把最相关的顶上去

  • 加查询纠错/改写:错别字纠正、同义词扩展、把口语化 query 改写成检索友好的形式

标准回答

两层结构:召回 + 排序

智能搜索框本质是「召回 + 排序」两层。召回用混合检索:一路 BM25 关键词匹配保证精确命中(型号、专有名词),一路 embedding 语义匹配处理「换个说法」的查询,两路结果合并去重。

自动补全/建议

用户打字时下拉提示用两种来源:基于历史热门 query 的前缀匹配(Trie 或 ES completion suggester),以及最近搜索记录。要求极低延迟,一般独立于主搜索链路,几十毫秒内返回。

提精度的两个手段

  1. Rerank:召回 Top-50 后用 cross-encoder 重排模型逐条精算相关性,取 Top-10 展示,精度显著提升但增加延迟。
  2. 查询改写:先用规则或小模型做纠错、同义词扩展、口语转检索词,再去召回。

必须做评测

整理一批「query→期望结果」标注集,用召回率、NDCG 等指标衡量,每次改动都回归,否则调参全凭感觉。

常见误区

⚠️ 常见踩坑

只上语义搜索丢掉关键词,结果搜精确型号/编号反而搜不到;rerank 全量召回都过一遍,延迟爆炸——应该只对 Top-K 候选 rerank。

追问

追问 1混合检索的两路结果分数不在一个量纲,怎么融合?

BM25 分数和向量余弦相似度量纲不同,不能直接相加。常用 RRF(Reciprocal Rank Fusion):只看每路里的排名,按 1/(k+rank) 累加,对量纲不敏感、实现简单、效果稳定。也可以各自归一化后加权,但权重要靠评测集调。

追问 2索引更新有延迟,用户搜不到刚发布的内容怎么办?

内容发布时同步写入 BM25 索引和向量库,用消息队列触发增量更新而非等定时全量重建。对「必须立刻可搜」的场景,可以加一路实时数据库兜底查询合并进结果。监控索引延迟,设告警,避免静默积压。

延伸学习

与本题相关的知识库文章、术语、工具与行业资讯。