クエリ再ランキング

クエリ再ランキングでは、マッチングドキュメントに対して単純なクエリ(A)を実行し、より複雑なクエリ(B)のスコアを使用して上位N個のドキュメントを再ランキングできます。

クエリBからのコストのかかるランキングは、上位のN個のドキュメントにのみ適用されるため、複雑なクエリB自体を使用する場合よりもパフォーマンスへの影響が少なくなります。トレードオフとして、単純なクエリAを使用して非常に低いスコアを付けたドキュメントは、クエリBを使用して非常に高いスコアを付けたとしても、再ランキングフェーズで考慮されない場合があります。

ランキングクエリの指定

ランキングクエリは、rqリクエストパラメータを使用して指定できます。rqパラメータは、解析時にRankQueryを生成するクエリ文字列を指定する必要があります。

現在、3つのランククエリがSolrディストリビューションに含まれています。また、作成したカスタムのQParserPluginを設定することもできますが、ほとんどのユーザーはSolrで提供されているパーサーを使用するだけで済みます。

パーサー QParserPluginクラス

rerank

ReRankQParserPlugin

xport

ExportQParserPlugin

ltr

LTRQParserPlugin

ReRankクエリパーサー

rerankパーサーは、ローカルパラメータで指定されたクエリと、再ランキングするドキュメントの数、および最終スコアの計算方法を示す追加パラメータをラップします。

reRankQuery

必須

デフォルト:なし

複雑なランキングクエリのクエリ文字列 - ほとんどの場合、変数を使用して別のリクエストパラメータを参照します。

reRankDocs

オプション

デフォルト:200

再ランキングする元のクエリの上位N個のドキュメントの数。この数値は最小値として扱われ、クエリを満たすのに十分なドキュメントをランク付けするために、内部で自動的に増加される場合があります(つまり、start+rows)。

reRankWeight

オプション

デフォルト:2.0

元のスコアと組み合わせる前に、上位一致ドキュメントごとにreRankQueryからのスコアに適用される乗数。

reRankScale

オプション

デフォルト:none

リランクスコアを最小値と最大値の間で調整します。このパラメータ値の形式はmin-maxで、minとmaxは正の整数です。例としてreRankScale=0-1はリランクスコアを0から1の間で再調整します。

reRankMainScale

オプション

デフォルト:none

メインクエリのスコアを最小値と最大値の間で調整します。このパラメータ値の形式はmin-maxで、minとmaxは正の整数です。例としてreRankMainScale=0-1はメインクエリのスコアを0から1の間で再調整します。

reRankOperator

オプション

デフォルト: add

デフォルトでは、reRankQueryからのスコアにreRankWeightを掛けた値が、元のスコアに加算されます。

下記の例では、デフォルトのaddの動作を使用しており、クエリ「greetings」に一致する上位1000件のドキュメントが、クエリ「(hi hello hey hiya)」を使用してリランクされます。それらの1000件のドキュメントの最終的なスコアは、「(hi hello hey hiya)」からのスコアに3を掛けた値と、元の「greetings」クエリのスコアの合計となります。

q=greetings&rq={!rerank reRankQuery=$rqq reRankDocs=1000 reRankWeight=3}&rqq=(hi+hello+hey+hiya)

ドキュメントが元のクエリに一致するが、リランキングクエリに一致しない場合、ドキュメントの元のスコアは変わりません。

reRankOperatormultiplyに設定すると、代わりに3つの数値が掛け合わされます。これは、eDisMax boost関数などの他の乗算操作をリランク操作に変換できることを意味します。

下記の例では、「phone」クエリに一致する上位1000件のドキュメントのスコアが、priceフィールドの関数で掛けられます。

q=phone&rq={!rerank reRankQuery=$rqq reRankDocs=1000 reRankWeight=1 reRankOperator=multiply}&rqq={!func v=div(1,sum(1,price))}

reRankOperatorreplaceに設定すると、スコアが置き換えられるため、最終的なスコアはドキュメントの元のスコアとは独立になります。

下記の例では、「phone」クエリに一致する上位1000件のドキュメントのスコアが、priceフィールドの関数に置き換えられます。

q=phone&rq={!rerank reRankQuery=$rqq reRankDocs=1000 reRankWeight=1 reRankOperator=replace}&rqq={!func v=div(1,sum(1,price))}

LTRクエリパーサー

ltrはLearning To Rankの略です。詳細については、Learning To Rankを参照してください。

ランキングクエリと他のSolr機能の組み合わせ

rqパラメータとリランキング機能は、一般的に他のSolr機能と相性が良いです。たとえば、Collapse and Expand Resultsと組み合わせて、グループ化されたヘッダーをリランクするために使用できます。また、クエリ昇格コンポーネントによって昇格されたドキュメントの順序も保持されます。そして、デバッグ情報を見たときにリランキングスコアがどのように導出されたかを確認できるように、独自の説明機能も備えています。