概要
Fess のRank Fusion機能は、複数の検索結果を統合して より精度の高い検索結果を提供します。
Rank Fusionとは
Rank Fusionは、複数の検索アルゴリズムやスコアリング手法の結果を 組み合わせて、単一の最適化されたランキングを生成する技術です。
主な利点:
異なるアルゴリズムの長所を組み合わせる
検索精度の向上
多様な検索結果の提供
対応アルゴリズム
Fess ではRRF(Reciprocal Rank Fusion)アルゴリズムをサポートしています。
RRF (Reciprocal Rank Fusion)
RRFは、各結果の順位の逆数を合計してスコアを計算します。
計算式:
k: 定数パラメーター(デフォルト: 20)rank(d): ドキュメントdの各検索結果での順位(0始まり)
設定
fess_config.properties
基本設定:
JVMシステムプロパティ
以下のプロパティは fess.in.sh (または fess.in.bat) でJVMオプションとして設定します:
ハイブリッド検索との連携
Rank Fusionは、キーワード検索とセマンティック検索を組み合わせた ハイブリッド検索で特に効果を発揮します。
使用例
基本的なハイブリッド検索
キーワード検索でBM25スコアを計算
セマンティック検索でベクトル類似度を計算
RRFで両方の結果を融合
最終的なランキングを生成
検索フロー:
パフォーマンス考慮事項
メモリ使用量
複数の検索結果を保持するため、メモリ使用量が増加
rank.fusion.window_sizeで融合対象の最大件数を制限
処理時間
複数の検索を実行するため、レスポンス時間が増加
rank.fusion.threadsで並列実行のスレッド数を設定
トラブルシューティング
検索結果が期待と異なる
症状: Rank Fusion後の結果が期待と異なる
確認事項:
各検索タイプの結果を個別に確認
rank.fusion.rank_constantの値を調整rank.fusion.window_sizeの値を調整
検索が遅い
症状: Rank Fusion有効時に検索が遅くなる
解決方法:
rank.fusion.window_sizeを減らす:rank.fusion.threadsを調整:
メモリ不足
症状: OutOfMemoryError が発生する
解決方法:
rank.fusion.window_sizeを減らすJVMヒープサイズを増やす
参考情報
スクリプティング概要 - スクリプティング概要
検索関連の設定 - 検索の詳細設定
LLM統合の概要 - LLM統合ガイド(セマンティック検索)