100万から5000万のSolrドキュメントを生成してSolrに追加するクライアントプログラムがあります。
クライアントからドキュメントをプッシュするために ConcurrentUpdateSolrServer を使用しています。リクエストごとに 1000 ドキュメントです。
ドキュメントは比較的小さい (小さなテキスト フィールドがほとんどない)。
割出し速度を上げたい。
「ramBufferSizeMB」を 1G に、「mergeFactor」を 25 に増やしてみましたが、変化は見られませんでした。
Solr のインデックス作成速度を向上させるために、他に推奨される設定があるかどうか疑問に思っていました。
関連資料へのリンクを歓迎します。
2 に答える
データを Solr に一括インポートしているように見えるので、すぐにデータを検索する必要はありません。
まず、リクエストごとのドキュメント数を増やすことができます。あなたのドキュメントは小さいので、リクエストごとに 10 万ドキュメント以上に増やして試してみます。
次に、一括インデックス作成時にコミットが発生する回数を減らしたいと考えています。solrconfig.xml で次を探します。
<!-- AutoCommit
Perform a hard commit automatically under certain conditions.
Instead of enabling autoCommit, consider using "commitWithin"
when adding documents.
http://wiki.apache.org/solr/UpdateXmlMessages
maxDocs - Maximum number of documents to add since the last
commit before automatically triggering a new commit.
maxTime - Maximum amount of time in ms that is allowed to pass
since a document was added before automatically
triggering a new commit.
openSearcher - if false, the commit causes recent index changes
to be flushed to stable storage, but does not cause a new
searcher to be opened to make those changes visible.
-->
<autoCommit>
<maxTime>15000</maxTime>
<openSearcher>false</openSearcher>
</autoCommit>
autoCommit を完全に無効にして、すべてのドキュメントが投稿された後に commit を呼び出すことができます。それ以外の場合は、次のように数値を微調整できます。
デフォルトmaxTime
は 15 秒なので、コミットされていないドキュメントがある場合は 15 秒ごとに自動コミットが行われるため、これを 3 時間 (つまり 3*60*60*1000) などの大きな値に設定できます。追加することもできます<maxDocs>50000000</maxDocs>
。これは、5,000 万のドキュメントが追加された後にのみ自動コミットが発生することを意味します。すべてのドキュメントを投稿した後、コミットを手動で、または SolrJ から 1 回呼び出します。コミットには時間がかかりますが、全体的にははるかに高速になります。
また、一括インポートが完了したら、reducemaxTime
とmaxDocs
を実行して、Solr への増分投稿がより早くコミットされるようにします。またはcommitWithin
、solrconfig で説明されているように使用します。