質問
Solrの日付フィールドによる昇圧は次のように定義されています:
{!boost b=recip(ms(NOW,datefield),3.16e-11,1,1)}
私はどこでも見ました(例: ブーストスコアリングのためのSolr Dismax構成 と 複数値の日付フィールドのSolr boost そしてそれらはすべて参照します SolrRelevancyFAQ)、使用されているのと同じ定義。しかし、私はこれが私の結果を十分に高めていないことを発見しました。どうすればこの日付を強くすることができますか?
ユーザーは2つのキーワードを検索しています。両方の項目には、タイトルと説明の両方に(同じ順序で)両方のキーワードが含まれています。どちらのキーワードも繰り返されません。
そして、solrデバッグ出力は、問題を理解するにはあまりにも混乱しています。
今、これは大きな問題ではありません。クエリの99%は正常に動作し、期待される結果を生成するので、solrがまったく動作していないようなものではありません。
解決
ユーザーは2つのキーワードを検索しています。両方の項目には両方のキーワードが含まれています タイトルと説明の両方で(同じ順序で)。キーワードのどちらもいずれでもない 繰り返されます。
well、あなたの例では、あなたの結果がtie
の状況に着陸したことは明らかです。 CINCUSING デバッグ出力のこの問題を理解し、 Tie Breaker ポリシーを考案することは、 dismax
。
DisMax
クエリを使用して、それらの多くがヒットした場合(同じdocument
内の異なるフィールドに表示される場合)さまざまなフィールドに対して異なる項目が実行されます。その用語のdocument
にヒットするその他のサブクエリは?まあ、それがtie
パラメータが定義するものです。 DisMax
は、照会用語のスコアを次のように計算します。
score= [score of the top scoring subquery] + tie * (sum of other hitting subqueries)
.
tie
パラメータは、Dismax
がMAX HET score
のみを検討した場合に定義します(tie
= 0)、項目の場合はすべてのヒット(設定tie
= 1)が定義されます。 )またはそれらの2つの極値の間の何か。
boost
パラメータはbf
パラメータと非常に似ていますが、その結果を最終スコアに追加するのではなく、それを乗算します。これは、拡張Descaxクエリパーサーまたは lucidクエリパーサーでのみ利用可能です。
興味深い記事がありますブースト方法の比較あなたにとって有用かもしれないSolrのa>。
Shishir
他のヒント
recip(x,m,a,b) インプリメンツ f(x) = a/(xm+b)
と :
x
:として定義されたms単位の文書の年齢ms(NOW,<datefield>)
.m
:boostを適用するために使用される時間スケールを定義する定数。それはあなたが古い文書の年齢(a)と考えるものに相対的でなければなりません reference_time)ミリ秒単位で。たとえば、aを選択します reference_time 1年(3月16日10時10分)のうち、その逆数を使用することを意味します :3.16e-11
(1/3.16:10)a
とb
は定数(任意に定義される)である。xm = 1
ドキュメントが1の場合 reference_time 古い(乗数=a/(1+b)
).
xm ≈ 0
ドキュメントが新しい場合、その結果、次の値に近い値が得られますa/b
.Aとbに同じ値を使用すると、最近のドキュメントで乗数が1を超えないようになります。
と
a = b = 1
, 、a1 reference_time 古い文書は、約1/2、2の乗数を持っています reference_time 古い文書は、というように約1/3の乗数を持っており、。
どのように強く後押し日付を作るには?
増加
m
:下を選択してください reference_time 例えば、6ヶ月、それは私たちを与えますm = 6.33e-11
.1年の基準と比較すると、文書の年齢が増加するにつれて乗数は2倍速く減少します。減少
a
とb
関数の応答曲線を展開します。これは非常に積極的なことができます、参照してください この例 (8ページ)。Boost関数自体にboostを適用します。
bf
(ブースト機能) パラメータ(これはdismaxパラメータであるため、DisMaxまたはeDisMaxクエリパーサーを使用する必要があります)。:bf=recip(ms(NOW,datefield),3.16e-11,1,1)^2.0
いくつかのことに注意することが重要です :
bf
である。 添加剤 ブーストととして機能します ボーナス 新しい文書のスコアに追加されました。{!boost b}
である。 乗法 ブーストとより多くのように機能します ペナルティ 古い文書のスコアに適用されます。Bfスコア(グローバルスコアに追加される「ボーナス」)は、関連性スコア(グローバルスコア)とは独立して計算されます。つまり、スコアが高いresultsetは、スコアが低いresultsetほど影響を受けない可能性があります。対照的に、乗法ブーストは結果セットの関連性に関係なくスコアに同じように影響するため、通常は優先されます。
使用しないでください
recip()
複数の日付の場合 reference_time 将来的には、負の値が得られます。
ノーラン・ローソンによるこの非常に洞察に満ちた投稿も参照してください Solrでのブーストメソッドの比較.
RIPROCALFLOATFUNCTION ブーストレシピがどのように機能するかについて明確なビューを表示します。dismax
がブーストを十分に制御しないことがわかった場合は、BoostQParserPlugin
を使用していくつかのTinkeringを実行する必要があります。
3.16E-11の乗数は、単位をミリ秒から年に変更します (年間約3.16E10ミリ秒があるため)。したがって、非常に 最近の日付は1 /(0 + 1)に近い値を生成するでしょう。 過去は約1 /(1 + 1)または1/2の乗数を取得し、日付2 歳の年齢は1 /(2 + 1)または1/3を譲渡します。