関連性のない結果が検索で最高の結果として返されるという問題があり、その動作を改善しようとしていますが、実際の方法はわかりません。
約12個のフィールドを持つSearchIndexがあります。document = Trueフィールドは、コンテンツの大部分を配置したテンプレートに裏打ちされたフィールドです。そこにあるもののいくつかは、たとえそれがまだ有用であるとしても、他のものよりもはるかに関連性が低いです。
具体的な例を挙げます。ユーザーが「赤いバラ」を検索した場合、上位の結果として赤いバラを返します。下位の結果が単なるバラまたは単に赤であるか、「バラの赤」と記述されている場合はさらに適切です。 " 色で。
問題は、document = Trueフィールドに、「ローズレッド」と記述されているアイテムが大量にあることです。さらに悪いことに、実際の赤いバラには「赤」と「バラ」が特に近くにありません。これらの値は異なるフィールドから取得されるためです。その結果、完全に無関係な上位数百の結果が得られます。
私たちがやりたいことは次のいずれかです。
A.プライマリドキュメントを検索してから、他の各フィールドを検索し、それに応じてブーストします(ただしハードフィルターは使用しません)。アイテム名の1つに「バラ」という用語が表示され、その属性値の1つとして「赤」が表示される場合、その結果のスコアは高くなるはずです。これにより、関連性でソートされた理論で最適な結果が得られます。
B.すべてのフィールドを一度に検索し、値が「ブーストされた」フィールドのいずれかである場合はブーストします。
フィールドブーストを使用することが答えになるはずですが、フィールドに基づくフィルタリングは厳しい除外であり、関連性スコアにのみ影響を与えるため、それを表現する方法を理解できません。
これらの両方の結果は事実上同じです。Haystackでどちらを実行するかがわかりません。または、生のクエリにフォールバックする必要がある場合は、これを実現するsolrクエリを作成する方法を説明します。