外卖系统中的搜索架构:主搜与垂搜详解

当我们打开外卖APP,核心诉求就是“找吃的”。这个看似简单的过程,背后其实由两套不同的搜索系统接力完成:主搜(全局搜索)垂搜(垂直搜索)。从技术实现上看,这是一个典型的 “召回-粗排-精排-重排” 的工业级搜索架构。

一、主搜:负责“猜你想要什么”的快速导览

主搜的技术目标是在百毫秒内,从亿级商品和百万级商家中,快速筛选出千级别相关结果,并进行智能排序。这个过程主要分为召回排序两大阶段。

1. 召回阶段:多路并发,广撒网

  • 倒排索引:这是搜索引擎的核心技术。系统预先建立“关键词->商家ID列表”的索引库。搜索“酸菜鱼”时,直接通过倒排索引找到所有相关商家。
  • 多路召回策略:系统并行执行多个召回通道:
    • 文本召回:匹配商家名、菜品名中的关键词
    • 语义召回:使用BERT等语义模型,理解“番茄”和“西红柿”的语义关联
    • 向量召回:将搜索词和商品转换为向量,通过向量相似度查找
    • 热门召回:确保热门商家不被遗漏
    • 个性化召回:基于用户历史偏好召回相似商家

2. 排序阶段:从粗排到精排

  • 粗排模型:由于召回结果过多(可能上万),先用轻量级模型快速筛选至千级别。主要考虑核心特征:距离、基础销量、评分等。
  • 精排模型:对粗排结果使用复杂机器学习模型进行精细排序:
# 精排模型考虑数百维特征
排序分数 = f(距离特征, 实时销量, 历史评分, 用户偏好, 商业化权重, 上下文特征)
    • 实时特征:当前时段、天气、用户实时位置
    • 用户画像:历史偏好、价格敏感度、口味偏好
    • 商业化因素:广告出价、推广预算
    • 上下文特征:搜索意图分类(找品牌?找品类?解馋?)

主搜就像一个站在美食城门口的智能接待机器人。你告诉他“我想吃酸菜鱼”,他通过内置的多种传感器(多路召回)和大脑中的AI算法(精排模型),迅速指出最优方向。

二、垂搜:负责“帮你精准筛选”的实时过滤引擎

当进入搜索结果页,垂搜开始接管。它的技术特点是实时过滤灵活重排,基于主搜的结果进行精细化处理。

1. 技术基础:正排索引与属性存储
每个商家被存储为包含所有属性的文档:

{
  "shop_id": 12345,
  "shop_name": "川味坊",
  "rating": 4.7,
  "avg_price": 45,
  "monthly_sales": 2856,
  "delivery_time": 30,
  "tags": ["川菜", "麻辣", "优惠券"],
  "location": {"lat": 39.9042, "lng": 116.4074}
}

2. 筛选器技术实现

  • 布尔过滤:每个筛选条件转化为布尔表达式
    • “评分4.5以上” → rating >= 4.5
    • “人均30-50元” → avg_price BETWEEN 30 AND 50
  • 位图索引:对分类等枚举字段,使用位图技术快速求交集
  • 多维度排序:支持按不同字段实时重排,底层依赖Lucene/Elasticsearch的排序能力

3. 重排机制
当用户选择“按距离排序”时,垂搜不再使用主搜的复杂模型分数,而是基于单一维度重新计算:

新排序 = sort_by(remaining_shops, 'distance')

垂搜就像是你进入美食街后遇到的专业餐厅管理系统。你提出具体需求,系统通过实时数据库查询和过滤算法,精准呈现结果。

三、技术协同:从算法到底层的完整架构

1. 完整搜索流程

用户搜索 → 查询理解 → 主搜(召回→粗排→精排) → 垂搜(属性加载→实时过滤→重排) → 前端渲染

2. 数据流与系统优化

  • 缓存策略:热门搜索词的结果在Redis中缓存,减轻数据库压力
  • 降级策略:当精排模型超时时,自动降级到粗排结果
  • AB实验:在线测试不同排序模型的效果
  • 实时反馈:用户点击行为实时反馈至模型,优化后续排序

3. 与推荐系统的融合
现代外卖搜索已超越单纯检索,融入了推荐思想:

  • 混排机制:当搜索结果不足时,自动补充个性化推荐结果
  • 多样性控制:避免同一品类商家过度集中,保证结果多样性
  • 探索与利用:适当展示新商家,收集用户反馈数据

四、技术演进方向

当前系统仍在持续进化:

  • 多模态搜索:通过菜品图片直接搜索相似商品
  • 端侧智能:在手机端预加载个性化模型,提升响应速度
  • 强化学习:根据长期用户满意度优化排序策略
  • 联邦学习:在保护隐私的前提下利用更多用户数据

总结:技术视角的分工

  • 主搜 = 倒排索引 + 多路召回 + 粗排/精排模型
    • 解决“从哪里开始找”的问题
    • 技术核心:相关性、智能化、响应速度
  • 垂搜 = 正排索引 + 布尔过滤 + 多维度排序
    • 解决“如何找到最满意的那一个”的问题
    • 技术核心:精确性、实时性、用户控制

这种架构设计在工程上实现了完美的关注点分离:主搜专注“理解意图”,垂搜专注“满足要求”。它们共同构成了一个既智能又可控的外卖搜索体验,在算法复杂度和系统性能之间取得了最佳平衡。

 

posted @ 2025-12-12 00:50  暹罗软件开发  阅读(17)  评论(0)    收藏  举报