设计搜索引擎
问题
设计一个支持语义搜索的搜索系统,兼顾关键词精确匹配和语义理解。
答案
一、系统架构
二、核心组件
Query 理解
| 功能 | 方法 |
|---|---|
| 意图识别 | 分类器判断搜索意图 |
| 查询改写 | LLM 扩展同义词 |
| 拼写纠错 | 编辑距离 + 语言模型 |
| 实体识别 | NER 提取关键实体 |
索引存储
| 存储 | 用途 |
|---|---|
| Elasticsearch | BM25 倒排索引 + 全文搜索 |
| 向量数据库 | Embedding 语义检索 |
| Redis | 热门查询缓存 |
融合排序
RRF(Reciprocal Rank Fusion):
将多路检索结果按排名融合,k 通常取 60。
三、AI 增强搜索
| 增强方式 | 说明 |
|---|---|
| 语义检索 | Embedding 匹配,理解同义词和意图 |
| Query 改写 | LLM 扩展查询 |
| AI 摘要 | 对搜索结果生成摘要(如 Perplexity) |
| 对话式搜索 | 多轮对话逐步细化需求 |
常见面试问题
Q1: BM25 和向量检索各自的优劣势?
答案:
| 场景 | BM25 更好 | 向量更好 |
|---|---|---|
| 专有名词 | ✅ 精确匹配 | ❌ 可能模糊 |
| 同义词 | ❌ 需要同义词表 | ✅ 语义理解 |
| 跨语言 | ❌ | ✅ |
| 速度 | ✅ 快 | 中 |
最佳实践:混合搜索,两者互补。