2013-03-27 67 views
10

我有一個客戶端程序,它可以生成1-50百萬個Solr文檔並將它們添加到Solr。
我使用ConcurrentUpdateSolrServer從客戶端推送文檔,每個請求輸入1000個文檔。
文檔相對較小(幾個小文本字段)。
我想提高索引速度。
我試圖增加「ramBufferSizeMB」到1G和「mergeFactor」到25,但沒有看到任何改變。
我想知道是否有其他推薦的設置來改善Solr索引速度。
任何有關材料的鏈接將不勝感激。如何配置Solr以提高索引速度

回答

8

看起來您正在將數據批量導入Solr,因此您無需立即搜索任何數據。

首先,您可以增加每個請求的文檔數量。由於您的文檔很小,我甚至會將它增加到每個請求100K或更多的文檔並嘗試。

其次,您希望減少批量索引時發生的提交次數。在您的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,然後在發佈所有文檔後調用提交。否則,您可以按如下方式調整數字:

默認maxTime爲15秒,因此如果存在未提交的文檔,則每15秒會發生一次自動提交,因此您可以將其設置爲較大的值,例如3小時(即3 * 60 * 60 * 1000)。您還可以添加<maxDocs>50000000</maxDocs>這意味着只有在添加了5000萬個文檔後纔會進行自動提交。發佈所有文檔後,手動或從SolrJ調用一次提交 - 需要一段時間才能提交,但總體來說速度要快得多。

此外,在完成批量導入後,請減少maxTimemaxDocs,以便您對Solr執行的任何增量帖子都將更快提交。或者使用solrconfig中提到的commitWithin

+0

如果提交完全禁用,則可能會發生內存不足。但不重新開放搜索者是一個好主意。 – 2013-03-29 01:51:49

+0

嗨你能建議如何配置它,以便它不會重新打開搜索器? – Krunal 2013-12-12 14:05:50

+0

自動提交後, false不會打開新的搜索器。 – arun 2013-12-13 03:35:48