概要
Fess のRank Fusion機能は、複数の検索結果を統合して より精度の高い検索結果を提供します。
Rank Fusionとは
Rank Fusionは、複数の検索アルゴリズムやスコアリング手法の結果を 組み合わせて、単一の最適化されたランキングを生成する技術です。
主な利点:
異なるアルゴリズムの長所を組み合わせる
検索精度の向上
多様な検索結果の提供
対応アルゴリズム
Fess では以下のRank Fusionアルゴリズムをサポートしています:
| アルゴリズム | 説明 |
|---|---|
| RRF (Reciprocal Rank Fusion) | 順位の逆数を使用した融合アルゴリズム |
RRF (Reciprocal Rank Fusion)
RRFは、各結果の順位の逆数を合計してスコアを計算します。
計算式:
score(d) = Σ 1 / (k + rank(d))
k: 定数パラメーター(デフォルト: 20)rank(d): ドキュメントdの各検索結果での順位
設定
fess_config.properties
基本設定:
# ウィンドウサイズ
rank.fusion.window_size=200
# RRFのランク定数
rank.fusion.rank_constant=20
# スレッド数(-1で自動)
rank.fusion.threads=-1
# スコアフィールド名
rank.fusion.score_field=rf_score
設定プロパティ一覧
| プロパティ | 説明 | デフォルト |
|---|---|---|
rank.fusion.window_size | 融合対象のウィンドウサイズ | 200 |
rank.fusion.rank_constant | RRFのランク定数(k) | 20 |
rank.fusion.threads | スレッド数(-1で自動) | -1 |
rank.fusion.score_field | スコアフィールド名 | rf_score |
ハイブリッド検索との連携
Rank Fusionは、キーワード検索とセマンティック検索を組み合わせた ハイブリッド検索で特に効果を発揮します。
使用例
基本的なハイブリッド検索
キーワード検索でBM25スコアを計算
セマンティック検索でベクトル類似度を計算
RRFで両方の結果を融合
最終的なランキングを生成
検索フロー:
User Query
↓
┌──────────────────┬──────────────────┐
│ Keyword Search │ Semantic Search │
│ (BM25) │ (Vector) │
└────────┬─────────┴────────┬─────────┘
↓ ↓
Rank List 1 Rank List 2
└────────┬─────────┘
↓
Rank Fusion (RRF)
↓
Final Ranking
トラブルシューティング
検索結果が期待と異なる
症状: Rank Fusion後の結果が期待と異なる
確認事項:
各検索タイプの結果を個別に確認
rank.fusion.rank_constantの値を調整rank.fusion.window_sizeを適切な値に設定
検索が遅い
症状: Rank Fusion有効時に検索が遅くなる
解決方法:
rank.fusion.threadsを調整してスレッド数を最適化rank.fusion.window_sizeを小さくする
メモリ不足
症状: OutOfMemoryError が発生する
解決方法:
rank.fusion.window_sizeを減らすJVMヒープサイズを増やす
不要な検索タイプを無効化
参考情報
スクリプティング概要 - スクリプティング概要
../admin/search-settings - 検索設定ガイド
LLM統合の概要 - LLM統合ガイド(セマンティック検索)