2013-08-07 42 views
0

我使用autocommit和softcommit功能遇到問題。當我使用CURL時,Autocommit/Softcommit不起作用

我用這個語法,捲曲更新我的數據:

curl $url/solr/update/csv -F "stream.file=$folder/$file" -F "commit=false" -F "header=false" -F "fieldnames=`cat $header`" 

我已經在我的solrconfig.xml中設定的自動提交:

<autoCommit> 
    <maxTime>10000</maxTime> 
    <openSearcher>false</openSearcher> 
</autoCommit> 

我已經編入索引的文檔的集合和在索引結束時(索引需要幾分鐘的時間)沒有文檔在我的solr管理器中可見...當我重新加載或當我執行顯式提交時,那麼我的所有文檔都可見。

我知道如果我在「commit = true」中更改「commit = false」,我的所有文檔都將被編入索引。但是我知道在每次更新之後進行提交併不是一個好的行爲。

我是否錯過了AutoCommit和SoftCommit的設置?

回答

0

從文件中的<autoCommit>部分。

在某些條件下自動執行硬提交。 而不是啓用autoCommit,請在添加文檔時考慮使用「commitWithin」 。

來自CommitWithin Wiki Page

CommitWithin是在Solr 1.4中引入的提交策略,它允許客戶請求Solr確保在特定時間內提交該提議<add>。這樣就可以控制何時向Solr本身進行提交,優化提交次數至最少,同時仍能滿足更新延遲要求。如果我說<add commitWithin=10000>(在XMLUpdateRequestHandler更新中),它會告訴Solr確保文檔在10000毫秒(即10秒)內被提交。然後,我可以在這10秒內繼續添加其他文檔(可能還有其他commitWithin值),並且當緩衝區中最早的文件到期時,Solr將自動執行<commit>

我一直在使用commitWithin上幾乎所有的索引更新的最後一年以上,並已見過比在solrconfig.xml中的<autoCommit>設置更好的結果。你可以通過改變你的"commit=false"使你的捲曲請求時"comitWithin=10000"如下指定此參數:

curl $url/solr/update/csv -F "stream.file=$folder/$file" -F "commitWithin=10000" -F "header=false" -F "fieldnames=`cat $header`" 
+0

謝謝回覆!我會嘗試commitWithin功能。但還有一個問題,我可以寫這樣的東西來嘗試autocommit和soft commit:curl $ url/solr/update/csv -F「stream.file = $ folder/$ file」-F「autoCommit = 10000」-F「 header = false「-F」fieldnames ='cat $ header'「。這是一個正確的語法?我需要比較這些不同提交策略的索引性能。 – Corentin

+0

CommitWithin本質上是通過url參數公開的autoCommit,因爲它僅在每個文檔級別公開相同的行爲,而不是在整個索引中公開。 SoftCommit未曝光AFAIK。這裏是可用的提交參數列表 - http://wiki.apache.org/solr/UpdateXmlMessages#A.22commit.22_and_.22optimize.22 –

+0

太棒了!有我需要的一切。非常感謝。 – Corentin

相關問題