ElasticSearch を使用して、ソーシャル機能を備えたビジネス検索を作成しようとしています。私はビジネス ディレクトリを持っており、ユーザーはさまざまな方法でそれらのビジネスと対話できます。たとえば、レビュー、チェックインなどです。
ユーザーがビジネスを検索するときに、友人がやり取りしたビジネスを結果の上部に表示できるようにしたいと考えています (または、それらのやり取りに基づいてフィルタリングします)。 これを達成するためにインデックスを設定する最良の方法は何ですか?
考えられる解決策はいくつかあると思いますが、私は ES の初心者であり、何が問題を引き起こすのかわかりません。
マルチテナンシーを使用して、ユーザーごとに個別のインデックスを作成できます。ユーザーの数は、ビジネスの数やユーザー固有のコンテンツの量よりもはるかに多いため、これを除外しました。
ユーザーとスコアのペアのリストを、インデックス付けされた各ビジネスに追加できます。ビジネスとやり取りしたすべてのユーザーがそこにいて、スコアは彼らがビジネスとやり取りした量を表します (これは私のフィルタリング/並べ替えの目的には十分です)。彼らがビジネスとやり取りするたびに、インデックスのスコアを更新します。これの問題は、友人の活動しか気にしないことです。そのため、ビジネスの複合スコアを作成するときに、友人が誰であるかを考慮する方法を見つける必要があります。ESでこれを行う方法がわかりません。
同様のスキームを作成することもできますが、ビジネスとのやり取りのスコアを保持する代わりに、スコアはビジネスとの友人のやり取りを反映します。これにより、ElasticSearch でソーシャル グラフをモデル化する必要がなくなりますが、ある人がビジネスとやり取りするたびに、すべての友人のスコアを更新する必要があります。また、各ビジネスのユーザー/スコアのペアのリストが大きくなることも意味します。これは、ビジネスとやり取りした友人がいる人を含める必要があるためです。
私が考えることができる最終的な解決策は、ビジネスに発生するすべての個々のやり取りを追跡し、それを ES のビジネス文書に追加することです。これは私には現実的ではないように思えます。他の解決策の問題を組み合わせたものです。しかし、インデックスを最新の状態に保つという点では、おそらく最も簡単な方法です。
ご協力いただきありがとうございます!