# 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