web-dev-qa-db-ja.com

Solrによる質問のコミットと最適化

私はクラシファイドのウェブサイトを持っています。ユーザーは、広告の挿入、広告の編集、広告の表示などを行うことができます。

ユーザーが広告を出すたびに、Solrにドキュメントを追加しています。ただし、いつコミットするかはわかりません。コミットは、私が読んだものから物事を遅くします。

どうすればいいですか? 12時間ごとに自動コミットしますか?

また、最適化でどのように行う必要がありますか?

65
user188962

実際、頻繁にコミットして最適化すると、物事が本当に遅くなります。重すぎる。

ものを検索して読んだ1日後、私はこれを見つけました:

1-最適化により、最適化されている間、インデックスのサイズが2倍になり、処理が非常に遅くなります。

2-各追加後にコミットするのは良い考えではありません。1日に2、3回コミットしてから、1日に1回だけ最適化を行うことをお勧めします。

3- solrconfig.xmlファイルでコミットを「autoCommit」に設定し、必要に応じて調整する必要があります。

37
user188962

コミット/最適化の詳細:

コミット:ドキュメントをsolrにインデックス付けする場合、commitコマンドを実行するまで、行っている変更は表示されません。したがって、commitコマンドを実行するタイミングは、検索エンジンを介してサイトに変更を表示する速度に本当に依存します。ただし、これは重い操作であるため、更新のたびにではなくバッチで実行する必要があります。

最適化:これは、ハードドライブのデフラグコマンドに似ています。インデックスをセグメントに再編成し(検索速度を上げる)、削除された(置換された)ドキュメントを削除します。 Solrは読み取り専用のデータストアであるため、ドキュメントのインデックスを作成するたびに、古いドキュメントを削除済みとしてマークし、削除されたドキュメントを置き換える新しいドキュメントを作成します。最適化は、これらの削除されたドキュメントを削除します。 Solr Statisticsページに移動して、numDocsとmaxDocsの数値を調べると、検索ドキュメントと削除されたドキュメントの数を確認できます。 2つの数値の違いは、インデックス内の削除された(検索できない)ドキュメントの量です。

また、Optimizeは古いインデックスから新しいインデックス全体を構築し、完了時に新しいインデックスに切り替えます。そのため、コマンドを実行するにはアクションの2倍のスペースが必要です。そのため、インデックスのサイズがハードドライブの空き容量の%50を超えないようにする必要があります。 (これは経験則であり、通常、削除されたドキュメントのために必要なのは%50未満です)

インデックスサーバー/検索サーバー:ポールブラウンは、solrの最適な設計は、専用サーバーとインデックス作成にtunedを持ち、検索サーバーに変更を複製することです。インデックスサーバーを調整して、複数のインデックスエンドポイントを持つことができます。

eg: http://solrindex01/index1; http://solrindex01/index2

また、インデックスサーバーはコンテンツを検索しないため、異なるメモリフットプリントやインデックスウォーミングコマンドなどを使用してセットアップすることができます。

これが皆さんにとって有益な情報であることを願っています。

137
James Roland

この種のことを通常行う方法は、ユーザーの要求パスの外側にあるSolrノードでコミット/最適化操作を実行することです。これには追加のハードウェアが必要ですが、インデックス作成操作のパフォーマンスの低下がユーザーに影響を与えないようにします。レプリケーションは、最適化されたインデックスファイルをマスターノードからユーザーの検索クエリを実行するノードに定期的に移動するために使用されます。

7
Paul Brown

最初に試してください。パフォーマンスの問題を引き起こす可能性があることを読んだからといって、シンプルでエレガントなソリューションを避けた場合、それは本当に悪いことです。つまり、 時期尚早な最適化 を避けてください。

1
John