0

これはLuceneの非常にあいまいな問題ではないと思いますが、どういうわけか、それに対する適切な解決策を見つけることができないようです。例を使用します。

ニュース記事のウェブサイトを構築しているとしましょう。登録ユーザーは興味のある記事をブックマークできます。ブックマークした記事だけを検索できるようにしたいと思います。例として、ユーザーが数千の記事をブックマークできる可能性があり、データベースに数十万のユーザーがいると仮定します。この問題のスケーラブルなソリューションを構築するにはどうすればよいですか?

どうもありがとう!

4

1 に答える 1

0

これは、結合をサポートしていないため、非常に典型的なLuceneの問題です。より具体的には、ファーストクラスのサポートはなく、それを回避する方法を見つける必要があります。私はいくつか提案することができます:

  1. とテーブルusersを持つデータベースを持つことができます(後者には最初の2つを指す外部キーがあります)。Luceneで記事のインデックスを作成することもできます。記事に対して検索を実行する場合、現在のユーザーによってブックマークされていないすべての記事を除外するLuceneを作成できます。articlesbookmarksFilter

  2. Luceneのすべての記事とブックマークにインデックスを付けることができます。これは、個別のインデックスを使用して行う場合に最適です。次に、ブックマークのクエリを実行して(現在のユーザーがブックマークした記事を取得するため)、記事に対して別のクエリを実行できます。前の例のように、最初のクエリの結果を使用して、現在のユーザーによってブックマークされていない他のすべての記事を除外できます。

これは古典的なリレーショナル構造であり、データベースはまさにこの目的のために設計されているため、私は個人的にオプション#1を好みます。オプション#2を使用すると、ユーザーが削除されたときにユーザーストレージとLuceneインデックスの両方を変更する必要があります。

于 2013-01-22T22:04:53.563 に答える