关于 opensearch-function-scoring-algorithms
面向使用 OpenSearch 或 Elasticsearch 构建市集搜索的工程师,提供排名方法参考。内容按九个阶段整理为 56 条规则,附代码示例与研究来源。
主要功能
- 01涵盖九类排名的 56 条规则
- 02提供 OpenSearch 和 Elasticsearch 查询示例
- 03介绍召回、评分与个性化方法
- 04说明偏差校正与市集公平性
- 05涵盖离线评估与 A/B 测试
- 06引用研究论文与官方文档
适用场景
- 01从头设计市集搜索排名
- 02调整混合召回与评分查询
- 03在 LTR 训练前校正点击日志偏差
- 04用离线指标和 A/B 测试评估排名变化
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ pproenca/ dot-skills --skill opensearch-function-scoring-algorithms安装后在 Claude Code 中输入/opensearch-function-scoring-algorithms确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
AGENTS.mdmetadata.jsonassets/templates/_template.mdreferences/_sections.mdbias-click-models.mdbias-counterfactual-eval.mdbias-interleaved-evaluation.mdbias-popularity-debiasing.mdbias-position-ips.mdbias-thompson-sampling.mddecay-exp-freshness.mddecay-gauss-geo.mddecay-multi-field-composition.mddecay-offset-noise.mddecay-scale-calibration.mddiv-category-diversity.mddiv-dpp-quality-diversity.mddiv-max-per-host.mddiv-mmr-rerank.mddiv-window-penalty.mdeval-ab-sample-size-mde.mdeval-ablation-attribution.mdeval-cuped-variance-reduction.mdeval-graded-judgment-set.mdeval-ndcg-primary-metric.mdeval-online-offline-correlation.mdeval-regression-query-suite.mdmarket-cold-start-exploration.mdmarket-conversion-weighted-ranking.mdmarket-host-quality-signals.md详细介绍
Marketplace-Research OpenSearch 函数评分最佳实践
一份研究支持的双边市场排序算法参考汇编,适用于在 OpenSearch 或 Elasticsearch 上实现的市场(Airbnb、Uber Eats、DoorDash、Etsy、eBay、Booking.com)。包含 9 个类别中的 56 条规则,按其在搜索排序流水线中的级联影响排序。每条规则都解释了原因(它要纠正的级联效应或偏差),展示错误与正确的代码(OpenSearch JSON 查询、Painless 脚本、Python 预处理、评估方法),并链接到权威来源——KDD/SIGIR/WSDM 论文、OpenSearch 文档,以及已在大规模场景验证这些模式的市场工程博客。
适用场景
遇到以下情况时,可参考此技能:
- 从头开始设计基于 OpenSearch 或 Elasticsearch 的新市场搜索系统
- 调整效果不明显的 function_score / rank_feature / script_score 查询
- 使用 Reciprocal Rank Fusion 设置混合检索(BM25 + 密集向量)
- 为十亿级 ANN 索引选择 HNSW 或 IVF
- 通过商品或用户嵌入向量或双塔架构添加个性化功能
- 在重新训练 LTR 模型前,纠正点击日志中的位置偏差
- 设计曝光公平性机制,或为新商品分配冷启动曝光
- 组合使用地理位置、日期和新鲜度的衰减函数(gauss / exp / linear)
- 使用 MMR、DPP 或每个主机的结果上限,提升顶部结果窗口的多样性
- 排查“为什么前 10 条结果中有 8 条来自同一个主机?”或“为什么排序偏向热门的现有商品?”
- 构建离线评估基础设施——分级标注集、NDCG@k 流水线、消融研究、回归查询集
- 为排序变更设计 A/B 测试——预先计算 MDE / 功效 / 样本量、使用 CUPED 降低方差、校准线上与线下指标的相关性
- 将效果提升归因到具体评分组件——“效果提升是来自新的偏差校正、嵌入向量,还是两者兼有?”
这些规则适用于任何由 OpenSearch/Elasticsearch 提供支持的市场搜索,不限于具体领域——住宿、食品配送、餐厅、服务、工作、二手商品、房地产。触发词包括“市场排序”、“搜索相关性”、“function_score”、“rank_feature”、“script_score”、“kNN”、“混合搜索”、“RRF”、“学习排序”、“基于嵌入向量的检索”、“双塔”、“位置偏差”、“MMR”、“供给公平性”、“帕累托多目标”、“NDCG”、“标注集”、“消融研究”、“CUPED”、“A/B 样本量”、“排序评估”以及“为什么我的搜索结果不好”。
搜索排序生命周期
类别依据市场搜索排序流水线划分。较早阶段会产生级联影响——召回阶段(阶段 1)出现的遗漏,无法通过任何下游加权来弥补;而基础相关性有误,则会影响每个功能评分:
Query → [1] Recall → [2] Base Relevance → [3] Quality Signals → [4] Personalization
→ [5] Geo/Time Decay → [6] Marketplace Balance → [7] Diversity Re-rank → Results
↑
[8] Bias Correction (applied across all stages
and into training)
↑
[9] Evaluation & Measurement (the meta-layer:
judgment sets, NDCG, ablation, A/B
sizing, CUPED — without these you
can't tell if any rule helped)
按优先级排列的规则类别
| 优先级 | 类别 | 影响 | 前缀 | 规则数 |
|---|---|---|---|---|
| 1 | 候选检索与召回 | CRITICAL | recall- | 6 |
| 2 | 基础相关性与字段评分 | CRITICAL | rel- | 7 |
| 3 | 质量信号与置信界限 | HIGH | qual- | 6 |
| 4 | 个性化与嵌入向量 | HIGH | pers- | 7 |
| 5 | 空间与时间衰减 | HIGH | decay- | 5 |
| 6 | 双边市场平衡 | HIGH | market- | 7 |
| 7 | 偏差校正与在线学习 | HIGH | bias- | 6 |
| 8 | 评估与测量 | HIGH | eval- | 7 |
| 9 | 多样性与重排序 | MEDIUM-HIGH | div- | 5 |
快速参考
1. 候选项检索与召回(关键)
recall-hybrid-rrf— 使用 BM25 与 kNN 混合检索,并采用倒数排名融合recall-two-tower-ebr— 使用双塔架构进行基于嵌入的检索recall-prefilter-knn— 对 kNN 应用预过滤,满足硬性约束recall-hnsw-vs-ivf— 低延迟选择 HNSW,大规模场景下节省内存选择 IVFrecall-multi-stage— 将检索拆分为低成本召回和高成本重排序recall-query-expansion— 在索引时进行同义词扩展以提高召回率,在查询时扩展以提高精确率
2. 基础相关性与字段评分(关键)
rel-bm25f-field-weights— 调整 BM25F 字段权重,再调整 k1/brel-multi-match-strategy— 根据查询形式选择 multi_match 类型,而非默认使用某种类型rel-bm25-k1-b-tuning— 针对较短的市场平台文档,按字段调整 BM25 的 k1 和 brel-listwise-loss— LTR 损失优先选择列表式(LambdaMART),而非成对式(RankNet)rel-script-score-over-function-score— 组合评分时使用 script_score 查询,而非 function_scorerel-rescore-over-bool-should— 对高开销评分使用 rescore 阶段,而非在检索时使用 bool/shouldrel-avoid-boost-inflation— 避免字段加权超过约 10 倍
3. 质量信号与置信界限(高)
qual-wilson-lower-bound— 按 Wilson 下界排序,而非平均评分qual-bayesian-average— 对样本量较少的星级评分使用贝叶斯平均值qual-rank-feature-saturation— 使用 rank_feature.saturation 对人气计数进行饱和处理qual-rank-feature-sigmoid— 对有界比率信号应用 Sigmoid 修饰器qual-log1p-vs-saturation— 长尾信号保留应选择 log1p,而非饱和处理qual-completeness-score— 将列表完整度作为质量信号进行评分
4. 个性化与嵌入(高)
pers-listing-embeddings— 根据预订会话共现数据训练列表嵌入pers-type-embeddings-cold-start— 为冷启动用户和列表使用类型嵌入pers-real-time-session-vector— 根据点击事件实时更新会话向量pers-multi-modal-embeddings— 使用多模态嵌入(文本 + 图像)进行召回pers-cross-encoder-rerank— 对排名前 50 的结果应用交叉编码器重排序,实现个性化pers-tower-split-offline-online— 将物品塔离线运行,查询塔在线运行pers-contextual-features— 将上下文特征注入 script_score
5. 空间与时间衰减(高)
decay-gauss-geo— 地理距离使用高斯衰减,而非线性衰减decay-exp-freshness— 时间新鲜度使用指数衰减,日期接近度使用高斯衰减decay-scale-calibration— 校准衰减尺度,使目标距离处的得分为 0.5decay-offset-noise— 为噪声较大的稀疏字段的衰减函数添加偏移量decay-multi-field-composition— 使用显式权重组合多字段衰减
6. 双边市场平衡(高)
market-conversion-weighted-ranking— 按转化率而非点击率加权排序market-cold-start-exploration— 通过有界曝光分配提升冷启动列表market-supply-fairness-lorenz— 使用 Lorenz/Gini 指标监控供给侧公平性market-host-quality-signals— 区分房东质量信号与列表质量信号market-inventory-health— 降低库存健康度较低的列表的排名market-pareto-multi-objective— 使用兼顾 Pareto 最优的权重优化多目标排序market-price-relevance— 使用柔性区间而非硬性过滤条件评估价格相关性
7. 偏差校正与在线学习(高)
bias-position-ips— 使用逆倾向评分校正位置偏差bias-click-models— 使用 PBM、级联模型或 DBN 估算点击倾向bias-thompson-sampling— 使用 Thompson 抽样探索排序方案bias-counterfactual-eval— 使用反事实评估验证排序变更bias-interleaved-evaluation— 使用交错评估比较低流量场景下的排序效果bias-popularity-debiasing— 在嵌入训练的负样本中对热门条目进行欠采样
8. 评估与测量(高)
eval-graded-judgment-set— 构建分级判定集,用于离线评估eval-ndcg-primary-metric— 使用 NDCG@k 作为离线排序的主要指标eval-online-offline-correlation— 在信任离线得分前,验证线上与线下指标的相关性eval-ablation-attribution— 开展消融研究,将效果提升归因于特定组件eval-ab-sample-size-mde— 在运行 A/B 测试前,根据 MDE 计算样本量eval-cuped-variance-reduction— 应用 CUPED,利用实验前协变量将 A/B 测试样本量减半eval-regression-query-suite— 维护回归查询集,以发现未被察觉的质量下降
9. 多样性与重排序(中高优先级)
div-mmr-rerank— 对 Top 窗口应用 MMR 重排序,以提升多样性div-max-per-host— 使用每组最大数量约束,限制每个主机的展示次数div-category-diversity— 在 Top 窗口中按层级实现类别多样性div-dpp-quality-diversity— 使用行列式点过程,同时优化质量与多样性div-window-penalty— 在重新评分中应用基于窗口的多样性惩罚
使用方法
对于聚焦的问题(“地理距离应该使用哪种衰减函数?”),请直接跳转到相关规则(decay-gauss-geo)——每条规则都自成一体,包含原因说明、OpenSearch 查询/Painless 代码和规范来源引用。
对于全面的排序系统审查,请从上到下依次处理各类别。级联顺序至关重要:首先确保召回正确(任何加权都无法找回遗漏的候选项),然后处理基础相关性(它是每个功能评分的乘数),接着依次处理质量、个性化、衰减、市场平衡和偏差校正。多样性是对排序良好的 Top 窗口执行的最后一步重排序。
要在重新训练前校正偏差,请从 bias-position-ips 和 bias-click-models 开始——对于任何基于记录的点击数据重新训练 LTR 模型的市场,在受到位置混杂影响的点击数据上应用 IPS 是最具杠杆效应的一项改进。
如需同时测试多种算法并进行实证验证,请从 eval-graded-judgment-set(搭建基础)和 eval-ndcg-primary-metric(选择指标)开始,然后使用 eval-ablation-attribution(将提升归因于特定组件)。搭配 eval-online-offline-correlation,验证离线指标能否预测在线行为;使用 eval-ab-sample-size-mde + eval-cuped-variance-reduction,规范地开展 A/B 测试;再用 eval-regression-query-suite 检查指定查询是否出现不易察觉的质量下降。
如需为设计决策引用研究资料,每条规则末尾都提供规范参考来源——KDD/SIGIR/WSDM 论文、相关工程博客(Airbnb、Pinterest、DoorDash、Etsy、Just Eat Takeaway、Thumbtack)或 OpenSearch 文档页面。
阅读章节定义,了解类别排序背后的级联影响依据;添加新规则时,请参阅规则模板。
参考文件
| 文件 | 说明 |
|---|---|
| references/_sections.md | 按级联影响排列的类别定义与顺序 |
| AGENTS.md | 简明目录导航(自动生成;请勿手动编辑) |
| assets/templates/_template.md | 编写新规则的模板 |
| metadata.json | 版本和权威参考 URL |