2013-03-27 9 views
10

私は、1〜50百万のSolrドキュメントを生成してSolrに追加するクライアントプログラムを持っています。
私はクライアントから文書をプッシュするためにConcurrentUpdateSolrServerを使用していますが、要求ごとに1000件の文書があります。
文書は比較的小さく(小さなテキストフィールドはほとんどありません)。
インデックス作成の速度を向上させたい。
"ramBufferSizeMB"を1Gに、 "mergeFactor"を25に増やそうとしましたが、変更は見られませんでした。
Solrのインデックス作成速度を改善するための推奨設定がいくつかあるかどうかは疑問でした。
関連資料へのリンクがあれば幸いです。改善のためにSolrを構成する方法

答えて

8

Solrにデータを一括インポートしているようですので、すぐにデータを検索する必要はありません。

最初に、リクエストごとにドキュメント数を増やすことができます。あなたのドキュメントは小さいので、リクエストあたり100Kドキュメントまで増やして試してみます。

第2に、一括インデックス作成時にコミットが発生する回数を減らす必要があります。あなたは完全に自動コミット無効にし、すべてのドキュメントが掲載された後にコミット呼び出すことができます

<!-- 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> 

:のためのあなたのsolrconfig.xmlで見えます。

デフォルトのmaxTimeは15秒です。コミットされていないドキュメントがある場合、15秒ごとに自動コミットが行われるため、これを3時間という大きな値に設定することができます(つまり3 * 60 * 60 * 1000)。 <maxDocs>50000000</maxDocs>を追加することもできます。これは、自動コミットが発生するのは、5千万の文書が追加された後にのみ発生することを意味します。すべての文書を投稿した後、手動で、またはSolrJからコミットを1回呼び出す - コミットするまでに時間がかかりますが、全体的にはるかに高速になります。

バルクインポートを完了した後でも、maxTimemaxDocsを減らしてください。そうすれば、Solrに対する増分ポストはもっと早くコミットされます。または、solrconfigで述べたようにcommitWithinを使用してください。

+0

コミットが完全に無効になっている場合、メモリが不足することがあります。しかし、サーチャーを再開しないことは良い考えです。 –

+0

こんにちはサーチャーを再開しないように設定する方法をアドバイスできますか? – Krunal

+0

' false'は自動コミットが発生した後に新しい検索者を開きません。 – arun

関連する問題