1

全文検索機能に Solr を使用しています。さまざまなニュース記事のテキストにインデックスを付けているとしましょう。

すべての記事を検索するのは、可能な限り簡単です。ただし、ユーザーは興味深い記事を「いいね」することができます。

各ユーザーが「いいね」履歴を検索できる機能を実装しようとしています。

私はこれを行うためのいくつかの可能な方法を考え出しましたが、実装することさえ可能であり、パフォーマンスと効率の点で最適な方法がまったくわからない場合、それらのいずれかを実際に実装する方法はありません。

1)私が思いついた最初の方法は、各行にユーザーのIDとユーザーが気に入った記事を保持する個別のMySQLデータベースを使用することです。

MySQL テーブルに対してクエリを実行して、任意のユーザーが気に入った記事 ID を返すことができますが、Solr の検索結果を絞り込んで、MySQL データベースから取得した ID を持つ記事のみを返すにはどうすればよいでしょうか?

2)私が理解できる唯一の他の方法は、ユーザーが記事を気に入るたびに user_id フィールドを追加して、別の Solr コアで複製ドキュメントを作成することです。ただし、100,000 人程度のユーザーがそれぞれ 100 ~ 1,000 件の記事を気に入っている場合、不要な量のストレージ スペースが消費されます。

この 2 番目の方法のもう 1 つの問題は、元の記事のテキストが変更された場合、記事を気に入ったユーザーごとに各関連ドキュメントを更新することも、対処しなければならない面倒な問題になることです。

3) 2 番目の方法と同じ考え方ですが、重複したドキュメントを作成する代わりに、「いいね」された記事を含むドキュメントのインデックスへの「いいね」情報リンクを含むドキュメントを作成します。

2番目の方法は、私が実行可能で実装方法を知っている3つのうちの唯一の方法ですが、記事を更新する必要があるときはいつでもストレージとパフォーマンスの点で無駄に思えます。これは非常に頻繁に発生します.

私の論理では、y が実装可能であれば、3 番目と 1 番目の方法がこの順序で優れているように見えますが、私は間違いなく間違っている可能性があります。それらが実装可能であり、/最適な方法である場合、それらの実装方法を説明できますか?そうでない場合、方法 2 で説明されているように 2 つ目の Solr コアを使用することは、必要な追加のストレージ容量と記事のテキストが変更されたときに大量の再インデックスが必要ですか?

この性質の何かを行うためのより良い代替手段はありますか? 私は Solr の使用に限定されているわけではありません。フルテキスト インデックス作成を目的としているため、リレーショナル データベースよりも使用する方がよいと考えただけです。

私の問題について何か光を当ててくれてありがとう。

更新:aitchnyu の質問の回答にある Solr の ExternalFileField は有望なようです。外部ファイルをインデックス化するフィールドがある場合、あるドキュメントのインデックスを別のドキュメントにリンクする方法があることは理にかなっています。

4

1 に答える 1

0

私は最初のオプションを使用します。SQL クエリを実行してから、Solr クエリを実行します。ただし、フィルター クエリ (fq) パラメーターを、データベースから取得した ID のリストに設定します。フィルター クエリは、返された検索結果のサブセットを抽出するために使用されます。この場合、特定のユーザーの類似履歴で発生するドキュメントのみが必要です。

于 2012-07-17T18:21:28.813 に答える