mcpField
O
opensearch-function-scoring-algorithms

opensearch-function-scoring-algorithms

github.com/pproencaデータ・データベース218122 回インストール11 週間前に更新
リポジトリ

opensearch-function-scoring-algorithms について

OpenSearch または Elasticsearch でマーケットプレイス検索を構築するエンジニア向けのランキング手法集です。研究に基づく56のルールを9段階に整理し、コード例と出典を示します。

主な機能

  1. 019カテゴリにわたる56のルール
  2. 02OpenSearchとElasticsearchのクエリ例
  3. 03検索候補、スコアリング、パーソナライズの手法
  4. 04バイアス補正とマーケットプレイスの公平性
  5. 05オフライン評価とA/Bテストの指針
  6. 06研究論文と公式ドキュメントの引用

活用シーン

  1. 01マーケットプレイス検索ランキングの新規設計
  2. 02ハイブリッド検索やスコアリングクエリの調整
  3. 03LTR学習前のクリックログのバイアス補正
  4. 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.md
metadata.json
assets/templates/
_template.md
references/
_sections.md
bias-click-models.md
bias-counterfactual-eval.md
bias-interleaved-evaluation.md
bias-popularity-debiasing.md
bias-position-ips.md
bias-thompson-sampling.md
decay-exp-freshness.md
decay-gauss-geo.md
decay-multi-field-composition.md
decay-offset-noise.md
decay-scale-calibration.md
div-category-diversity.md
div-dpp-quality-diversity.md
div-max-per-host.md
div-mmr-rerank.md
div-window-penalty.md
eval-ab-sample-size-mde.md
eval-ablation-attribution.md
eval-cuped-variance-reduction.md
eval-graded-judgment-set.md
eval-ndcg-primary-metric.md
eval-online-offline-correlation.md
eval-regression-query-suite.md
market-cold-start-exploration.md
market-conversion-weighted-ranking.md
market-host-quality-signals.md

詳細

マーケットプレイスの調査: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」「Learning to Rank」「埋め込みベースの検索」「ツータワー」「掲載順位バイアス」「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候補の取得と再現率重大recall-6
2ベースの関連性とフィールドスコアリング重大rel-7
3品質シグナルと信頼区間高qual-6
4パーソナライズと埋め込み高pers-7
5空間的・時間的減衰高decay-5
6両面マーケットプレイスのバランス高market-7
7バイアス補正とオンライン学習高bias-6
8評価と測定高eval-7
9多様性と再ランキング中〜高div-5

クイックリファレンス

1. 候補の取得と再現率(重大)
  • recall-hybrid-rrf — BM25 と kNN を Reciprocal Rank Fusion で組み合わせます
  • recall-two-tower-ebr — Two-Tower アーキテクチャを使った埋め込みベースの検索を行います
  • recall-prefilter-knn — 厳格な制約条件を設けて kNN に事前フィルターを適用します
  • recall-hnsw-vs-ivf — レイテンシを重視する場合は HNSW、大規模環境でメモリを重視する場合は IVF を選択します
  • recall-multi-stage — 検索を、低コストの候補取得と高コストの再ランク付けに分けます
  • recall-query-expansion — 再現率を高めるにはインデックス作成時に、適合率を高めるにはクエリ時に同義語を展開します
2. 基本的な適合度とフィールドスコアリング(重大)
  • rel-bm25f-field-weights — k1/b を調整する前に BM25F のフィールドの重みを調整します
  • rel-multi-match-strategy — デフォルトで選ぶのではなく、クエリの形状に応じて multi_match のタイプを選択します
  • rel-bm25-k1-b-tuning — 短いマーケットプレイス文書向けに、フィールドごとに BM25 の k1 と b を調整します
  • rel-listwise-loss — LTR の損失関数には、ペアワイズ(RankNet)よりリストワイズ(LambdaMART)を優先します
  • rel-script-score-over-function-score — スコアを合成するには function_score ではなく script_score クエリを使います
  • rel-rescore-over-bool-should — 検索時に bool/should を使うのではなく、重いスコアリングには rescore フェーズを使います
  • rel-avoid-boost-inflation — フィールドのブーストが約10倍を超えて膨らまないようにします
3. 品質シグナルと信頼区間(高)
4. パーソナライズと埋め込み(高)
5. 空間・時間減衰(高)
  • decay-gauss-geo — 地理的距離には線形減衰ではなくガウス減衰を使用する
  • decay-exp-freshness — 時間的な鮮度には指数減衰、日付の近さにはガウス減衰を使用する
  • decay-scale-calibration — スコアが0.5になる距離を目標に減衰スケールを調整する
  • decay-offset-noise — ノイズの多い疎なフィールドでは、減衰関数にオフセットを追加する
  • decay-multi-field-composition — 明示的な重みを使って複数フィールドの減衰を合成する
6. 双方向マーケットプレイスのバランス(高)
7. バイアス補正とオンライン学習(高)
8. 評価と測定(高)
9. 多様性と再ランキング(中〜高)
  • div-mmr-rerank — MMR 再ランキングを適用して、上位ウィンドウの多様性を確保する
  • div-max-per-host — グループごとの最大件数制約で、ホストあたりのインプレッション数を制限する
  • div-category-diversity — 上位ウィンドウでカテゴリを階層的に多様化する
  • div-dpp-quality-diversity — 行列式点過程を使用して、品質と多様性を同時に実現する
  • div-window-penalty — 再スコアリングでウィンドウベースの多様性ペナルティを適用する

使用方法

「地理的距離にはどの減衰関数を使うべきか」といった具体的な質問には、該当するルール(decay-gauss-geo)を直接参照してください。各ルールには、理由、OpenSearch クエリ/Painless コード、標準的な出典がすべて含まれています。

ランキングシステム全体をレビューする場合は、カテゴリを上から順に確認してください。このカスケードの順序には意味があります。まずリコールを正しく処理します(ブーストでは、候補から漏れたものを取り戻せません)。次に基本関連度を調整します(これはすべての機能スコアに掛け合わされる値です)。その後、品質、パーソナライゼーション、減衰、マーケットプレイスのバランス、バイアス補正の順に進めます。多様性は、適切に順序付けられた上位ウィンドウに対する最後の再ランキングステップです。

再トレーニングの前にバイアスを補正する場合は、bias-position-ips と bias-click-models から始めてください。位置による交絡があるクリックデータに IPS を適用することは、ログに記録されたクリックで LTR モデルを再トレーニングするマーケットプレイスにとって、最も効果の大きい変更です。

複数のアルゴリズムを組み合わせてテストし、実証的に検証する場合は、eval-graded-judgment-set(基盤を構築)、eval-ndcg-primary-metric(指標を選択)、eval-ablation-attribution(特定のコンポーネントによる改善を特定)の順に始めてください。オフライン指標がオンラインの動作を予測できるかを検証するには eval-online-offline-correlation を併用し、規律ある A/B テストには eval-ab-sample-size-mde と eval-cuped-variance-reduction を、名前付きクエリで気付かれにくい品質低下を検出するには 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

コメント