搜索核心算法:从召回到排序

现代搜索引擎的核心框架的确可以概括为 召回(Recall)排序(Ranking) 两大环节。

在大规模工业系统中,这个流程通常被细化为 召回 → 粗排 → 精排 → 重排 的级联架构,但本质上仍属于"先找到候选集,再对候选集排序"。


1. 召回 ------ 从海量候选里"捞"出相关项

目标:快速、高覆盖地从亿级甚至十亿级文档中,挑出几百到几千个可能相关的候选。

  • 特点

    • 速度极快(毫秒级)
    • 可容忍一定粗糙度
    • 高召回率,尽量少漏掉有用结果
  • 常用方法

    • 倒排索引 + 关键词匹配:传统文本搜索基础,如 BM25。
    • 向量语义召回:通过 Embedding 做近似最近邻(ANN)搜索,捕捉字面不匹配但语义相关的内容。
    • 多路召回并行:结合个性化召回、地理位置召回、热门召回、实时召回等多条策略,结果合并后送入下游。

没有高质量的召回,后续排序再精细也无的放矢。


2. 排序 ------ 对候选集"排好队"

目标:精准评估每条候选的得分,把最满足用户需求的结果放到最前面。

  • 特点

    • 模型更复杂,特征更丰富(点击率、相关性、时效性、用户画像等)
    • 处理的文档量已由召回大幅缩减
  • 常见分层

    • 粗排:用轻量模型(如双塔、简单逻辑回归)将候选从几千个快速减到几百个,缓解精排压力。
    • 精排:用复杂的深度模型(如 DeepFM、DIN)逐条精细打分,追求最准确的效果。
    • 重排:在精排结果之上进行多样性控制、业务规则干预(如去重、打散同类目、插入广告、强插内容)。

3. 容易被忽略的关键环节

查询理解(排序前)

对用户输入的 Query 进行:

  • 意图识别、实体识别
  • 分词、纠错、改写、联想
  • 同义词扩展、权重分配

查询理解的质量直接决定了召回和排序的天花板。

重排 & 混排(排序后)

在生成最终展示列表前,需要加入:

  • 多样性打散(避免同一类内容扎堆)
  • 广告、运营位、推荐结果的混排
  • 业务规则(如黑白名单、最小间隔数)

4. 整体流程示意

bash 复制代码
用户 Query
│
▼
[ 查询理解 ] → 纠错/改写/权重
│
▼
[ 多路召回 ] → 倒排召回 + 向量召回 + 个性化召回 ...
│
▼
[ 粗排 ] → 轻量模型快速过滤
│
▼
[ 精排 ] → 深度模型精准打分
│
▼
[ 重排 ] → 多样性 & 业务规则干预
│
▼
最终展示结果

5. 总结

  • 召回和排序是搜索系统最核心的两大骨架。
  • 实际工业系统会拆分为更多层(粗排、精排、重排),本质仍是"召回 → 排序"思想的延续。
  • 系统优化的大部分精力都集中在:
    如何召回更多真正相关的东西 以及 如何把它们排得更符合用户预期

如果想继续深入,可以沿着 多路召回策略、粗精排模型选型、重排多样性算法 这几个方向研究。

相关推荐
JieE2121 天前
LeetCode 101. 对称二叉树|JS 递归 + 迭代双解法,彻底搞懂镜像判断
javascript·算法
JieE2122 天前
LeetCode 56. 合并区间|超清晰 JS 图解思路,面试高频区间题
javascript·算法·面试
Jack203 天前
HarmonyOS开发中错误处理策略:网络异常统一处理
算法
小小杨树3 天前
读懂色彩:拍照调色不再难
算法·计算机视觉·配色
JieE2123 天前
LeetCode 226. 翻转二叉树|JS 递归超详细拆解,二叉树入门经典题
javascript·算法
JieE2123 天前
LeetCode 104. 二叉树的最大深度|递归思路超详细拆解
javascript·算法
vivo互联网技术4 天前
CVPR 2026 | 全新强化学习框架 BeautyGRPO:重塑真实人像
算法·大模型·cvpr·影像
Darling噜啦啦4 天前
列表转树算法深度解析:从 Map 到 Reduce 的两种实现,面试高频考点
数据结构·算法·面试
用户497863050734 天前
(一)小红的数组操作
算法·编程语言