Solr でリレーショナル データを検索する簡単な方法を見つけましたが、それをさらに最適化する必要があるかどうかはわかりません。
例を挙げましょう。たとえば、ユーザーが本を個人のコレクションとして整理するシステムがあるとします。書籍には、「ドラマ」、「スリラー」、「ホラー」などのジャンルがあります。ユーザー コレクションには、さまざまなジャンルの書籍が含まれている場合があり、ほとんどの場合、含まれています。
ユーザーがコレクションをジャンル別に検索できる検索を作成する場合、ジャンル クエリに最も関連する本を含む結果を返したいと思います。私が行ったのは簡単なトリックでした。「ジャンル」という名前のコレクションの検索フィールドを追加しました。これは、そのコレクション内のすべての本のジャンルを連結した文字列です。この文字列フィールドは、インデックス時に作成されます。コレクションに 30 冊の「スリラー」本と 20 冊の「コメディ」本が含まれている場合、「スリラー」を検索すると、「コメディ」を検索するよりも関連性の高い結果として表示されるため、これは非常に理にかなっています。
ただし、ご想像のとおり、「ジャンル」フィールドには多くの重複用語が含まれています。これは舞台裏でのみ使用され、どこにも表示されないため、これはデータの整合性ではなく、最適化の問題 IMHO です。
私は特にSolrが初めてです。私はそれがどのように機能するかを認識しており、逆インデックスを構築する時点で、すべての用語が単純な頻度カウントに関連付けられると想定しています。技術的には、「ジャンル」フィールドが 100 語または 10000 語で構成され、そのうちの 9500 が「スリラー」である場合でも、インデックス作成とクエリの速度にはあまり影響しないはずですよね?
私が間違っている場合、入力テキストでもブーストを与えることができる構文は存在しますか? たとえば、10000 語ではなく、「ジャンル」フィールドが次のようになったとします。
「スリラー^8500 コメディ^125 ドラマ^12」