モデルと一致にsolr morelikethisに異なるフィールドを使用することは可能ですか?
-
10-10-2019 - |
質問
AとBの2つのフィールドを持つドキュメントがあるとしましょう。
SolrのMorelikethisを使用したいと思いますが、ひねりを加えています。モデルドキュメントのBフィールドのようなフィールドがあるドキュメントをブーストすることに最も興味があります。 (つまり、モデルBフィールドからMLTの「興味深い用語」を抽出しますが、Aフィールドに基づいてMLTの結果のみを収集します。)
MLT.FLフィールドまたはMLT.QFブーストを使用して、1つのクエリでこの効果を達成する方法はありません。 (MLT.FLは、「興味深い用語」の発見とそれらの用語との一致の両方に使用されるフィールドを指定しているようです。)いくつかのオプションがありませんか?
または、「興味深い用語」を自分で抽出し、「フィールド:用語」の詳細を交換する必要がありますか?
(この同じ脈の他のアイデアも高く評価されています。)
解決 2
現在、目的の効果を達成するには2つの方法があると思います(MLTソースコードをカスタマイズせずに)。
最初のオプション:で初期のMLTクエリを実行します MLTハンドラー, 、パラメーターを追加します &mlt.interestingTerms=details
. 。これには、相対的なブーストでランク付けされた興味深いとみなされた用語のリストが含まれます。通常の動作は、同じMLT.FLフィールドに対して発見された用語を使用して、同様のドキュメントを見つけます。たとえば、応答には次のようなものが含まれます。
"interestingTerms":
["field_b:foo",5.0,"field_b:bar",2.9085307,"field_b:baz",1.67070794]
(興味深いこの最初のクエリについての唯一のことは、興味深いものです。 fq
これは、すべてのドキュメントを除外することで、不必要なスコアリング作業をスキップするのに役立ちます。)
その興味深い情報を新しいまたはクエリに明示的に再構成する field_a:foo^5.0 field_a:bar^2.9085307 field_a:baz^1.67070794
Bフィールドの例テキストを使用して、フィールドAで類似したドキュメントを見つけることに相当し、デフォルトのMLTが通常のモデルフィールドで実行するクエリの種類を正確に模倣している可能性があります。
2番目のオプション:モデルドキュメントの実際のフィールドBテキストをつかみ、 コンテンツストリームボディ, 、モデルドキュメントを指定するために、クエリの代わりに使用されます。次に、同様の結果を収集するために、フィールドAでMLT.FLをターゲットにします。たとえば、パラメーターの断片は …&stream.body=foo bar baz&mlt.fl=field_a&…
. 。繰り返しますが、正味の効果は、FIELD_BのモデルテキストがField_aでのみ類似したドキュメントを見つけているということです。
他のヒント
私が見る2つのオプションは次のとおりです。
- コピーフィールドを使用 - 名前付きbのフィールドAフィールドのコピーで元のドキュメントをインデックスし、次にBを使用して照会します
- Morelikethishandlerを拡張し、クエリをするフィールドを変更します。
最初のオプションは、少しのプログラミング(主に構成の変更)といくつかのメモリ消費量がかかります。 2番目には、より多くのプログラミングが含まれますが、メモリフットプリントの増加はありません。それらの1つがあなたのニーズに合っていることを願っています。