5

次のようなドキュメントフィールドを持つSolrインデックスがあります。

id, body_text, date, num_upvotes, num_downvotes

私のアプリケーションでは、ドキュメントはいくつかの整数idといくつかbody_text(最大500文字)で作成されます。日付は入力時刻に設定され、 0num_upvotesからnum_downvotes始まります。

私のアプリケーションは、ユーザーに上記のコンテンツに賛成票と反対票を投じる機能を提供します。DBだけでなく、Solrでこれを追跡したい理由は、自分のに賛成票と反対票の数を考慮できるようにするためsearchです。

これは、solrドキュメント(つまり、up_votesの増分数)を単純に更新することはできず、ドキュメント全体を置き換える必要があるため、問題です。これは、関連するすべてのデータを再度取得するためにDBにアクセスする必要があることを考えると、おそらくかなり非効率的です。

このソリューションでは、異なるレイアウトのデータ、または場合によっては複数のインデックスが必要になる可能性があることを認識しています(ただし、Solrコア間でクエリ/スコアリングできるかどうかはわかりません)。

誰かがこれに取り組む方法について何かアドバイスを提供できますか?

4

4 に答える 4

4

同様の問題で私が使用する解決策は、データベース内のその情報を更新し、最後の更新以降に変更されたドキュメントを使用して10分ごとにSOLR更新/挿入を実行することです。

また、毎晩、トラフィックが少ないときは、インデックスを最適化します。インポートするたびに、SOLR構成でウォームアップクエリを設定しました。

私のSOLRインデックスには、約150万のドキュメントがあり、各ドキュメントには24のフィールドがあり、ドキュメント全体で約2000文字です。私は10分ごとに約500のドキュメント(インデックスを最適化せずに)を更新し、最も一般的なファセット、最もよく使用されるフィルタークエリ、およびフリーテキスト検索で構成される約50のウォームアップクエリを実行します。

パフォーマンスに悪影響を与えることはありません。(少なくとも表示されません)-私のクエリは平均0.1秒で実行されます。(10分ごとに更新を行う前の平均クエリは0.09秒でした)

後で編集:

このアップデート中に問題は発生しませんでした。私は常にデータベースからドキュメントを取得し、SOLRへの一意のキーを使用してそれらを挿入します。ドキュメントがSOLRに存在する場合、それは置き換えられます(これは私が更新によって意味するものです)。

SOLRの更新に3分以上かかることはありません。実際、私は更新のたびに10分の休憩を取っています。そこで、インデックスの更新を開始し、それが完了するのを待ってから、さらに10分待ってから再開します。

私は一晩中のパフォーマンスを見ていませんでしたが、ユーザーがピークを訪れている間のデータの新鮮な情報が欲しいので、私にとっては関係ありません。

于 2011-11-18T11:45:00.800 に答える
2

参加機能はここで役立ちます。次に、賛成票と反対票を別のドキュメントに保存できます。

悪いニュースは、トランクビルドで快適に実行できない限り、Solr4まで待つ必要があるということです。

于 2011-11-16T16:07:17.340 に答える
1

賛成/反対票を更新するだけの場合。データベースに戻る代わりに、アプリケーションに適切なSolrクライアントを使用して、インデックスからドキュメントをプルし、必要に応じてアップ/ダウン値を設定してから、ドキュメントをインデックスに再挿入します。

于 2011-11-16T15:45:35.520 に答える
0

SOLR内での問題に対する解決策はありません。データベースに問題があり、検索エンジンでそれを解決しようとしています。

これに対処する最善の方法は、SOLRからの投票数と賛成/反対票数redisを記録するデータベースを保持することです。document id次に、アプリは表示する前に両方のソースからのデータをマージできます。

于 2011-11-18T04:41:40.703 に答える