Solr で、各フィールドの各クエリの重みが異なる場合に、異なるフィールド間でクエリを実行する最良の方法は何ですか?
私たちは C# と ASP.NET を使用しており、 SolrNetは Solr のクエリに使用されています。インデックスは次のようになります。
- ドキュメント ID
- 題名
- テキスト_コンテンツ
- タグ
- [いくつかのフィールド...]
これは、キーワードを使用してクエリされます。各キーワードの重みは異なります。たとえば、「ipad」の重みは 40 ですが、「android」の重みは 25 になる場合があります。
これに伴い、フィールドごとにベースウェイトが異なります。たとえば、キーワードはページ タイトルよりも価値があり、ページ タイトルはテキスト コンテンツよりも価値があります。
したがって、次のような結果になります。
- タイトル^25
- text_content^10
- タグ^50
そして、次のキーワード:
- iPad^25
- りんご^22
- マイクロソフト^15
- 窓^15
- ソフトウェア^20
- コンピュータ^18
したがって、各検索クエリには異なる重みがあり、各フィールドには異なる重みがあります。その結果、次のような検索基準が得られます。
- タイトル:iPad^50
- タイトル:りんご^47
- タイトル:マイクロソフト^40
- [その他のタイトル...]
- text_content:iPad^35
- text_content:りんご^32
- text_content:microsoft^25
- [さらに多く...]
これは非常に長い検索クエリに変換され、許可されている制限を超えています。また、非常に非効率的な方法のようにも思えます。これを達成するためのより良い方法があるかどうか疑問に思っていました。
事実上、さまざまな重みを持つキーワードのリストと、さまざまな重みを持つ Solr のフィールドのリストがあり、最も関連性の高いドキュメントを取得するためにインデックスにクエリを実行するという考え方です。
この問題をさらに複雑にしているのは、この質問の範囲外かもしれませんが、クエリにはドキュメントを除外するためのフィルターも含まれていることです。これは、次のタイプのクエリを使用して行われます。
&fq=(-document_id:4f845eb321c90b0aec5ee0eb)&fq=(-document_id:4f845cd421c90b0aec5ee041)&fq=(-document_id:4f845cea21c90b0aec5ee049)&fq=(-document_id:4f845cf821c90b0aec5ee04d)&fq=(-document_id:4f845d0e21c90b0aec5ee056)&fq=(-document_id:4f845d3521c90b0aec5ee064)&fq= (-document_id:4f845d3921c90b0aec5ee065)&fq=(-document_id:4f845d4921c90b0aec5ee06b)&fq=(-document_id:4f845d7521c90b0aec5ee07b)&fq=(-document_id:4f845d9021c90b0aec5ee084)&fq=(-document_id:4f845dac21c90b0aec5ee08e)&fq=(-document_id:4f845dbc21c90b0aec5ee093)
これらも検索クエリに多くの文字を追加する可能性があり、これを処理するためのより良い方法もあるとよいでしょう.
どんな助けやアドバイスも大歓迎です。ありがとう。