# Summary [[词袋模型]]:[[TF-IDF]] 和[[BM25]],缺点是 term 顺序和上下文无关的,但是对于行程规划的目的地、天数的诉求一般也是不太有强烈 context 的 注意:索引、缓存、异步 评估指标:- Recall@K: 召回率 - Precision@K: 准确率 - NDCG@K: 归一化折损累积增益 - MRR: 平均倒数排名 1. 1. 内容搜索 1. 内容的 BM25:`用户查询 → 分词 → Elasticsearch → BM25 排序 → 返回结果` 2. 内容的 Embedding 搜索 # Cues [ElasticSearch、ES](ElasticSearch、ES.md) [搜索](搜索.md) [[MMR]] # Notes 300万帖子 ↓ 【第2阶段:过滤层 Filter】- 从 300 → 200-500 ├─ 硬性条件过滤(地点、预算、天数) └─ 保留符合条件的结果 ↓ 【第1阶段:召回层 Recall】- 从 300万 → 150-200 ├─ [[向量检索]](Faiss)→ Top 200 ├─ [[关键词检索]](ES)→ Top 200 └─ 融合去重 → ~300个候选 ↓ 【第3阶段:粗排层 Coarse Ranking】- 从 200 → 100 ├─ [[融合排序]]召回分数(向量 + 关键词) ├─ 可选:加入浅层业务特征 │ ├─ 热度衰减:likes × time_decay │ └─ 基础质量分:content_length, has_images └─ 快速排序 ↓ 【第4阶段:精排层 Fine Ranking】- 从 100 → 50 ├─ [[reranker 重排序]]模型(Cross-Encoder)← 核心改动 ├─ 可选:深层业务特征融合 │ ├─ 个性化:user_profile_match │ ├─ 时效性:publish_date_score │ ├─ 完整度:has_itinerary, has_budget │ └─ 社交信号:comments, saves, shares └─ 加权融合得到最终分数 ↓ 【第5阶段:多样性调整 Diversity】- 从 50 → 20 ├─ [[MMR]](最大边际相关性)算法 ├─ 避免同一作者/地点/主题扎堆 └─ 保证结果覆盖不同维度 ↓ 【第6阶段:可能存在的业务规则 Business Rules】- 从 20 → 10 ├─ 去广告/营销帖 ├─ 黑名单过滤 ├─ 插入推广内容(如有) └─ 最终调整顺序 ↓ 返回 Top 10 ## 1. 元数据过滤 2. 内容搜索 简单方案 用户查询 ↓ 查询编码(向量 + 关键词) ↓ 双路召回:向量检索(Milvus/Faiss)+ 关键词检索(ES) ↓ [[融合排序]] ↓ 返回结果 正式方案 用户查询 ↓ 召回层:混合检索(Top 100):向量检索+ 关键词检索(ES) ↓ 粗排层:[[融合排序]] ↓ 精排层:Cross-Encoder [[reranker 重排序]](Top 20) ↓ 可能存在的业务层过滤、融合业务特征的排序(点赞、时效、个性化)、多样性调整(避免返回过于相似的帖子) ↓ 返回 Top K