2013-04-09 83 views
1

我目前正致力於改進應用程序的索引速度,因爲我沒有完全控制執行索引的代碼。我發現索引代碼在每個文檔之後提交了一個提交,這是我爲了性能原因而想要避免的。在Solr中禁用顯式提交

問:

是否有可能在Solr中禁用所有提交從 客戶明確提出,而僅依靠汽車犯Solr的配置配置?

+0

不認爲這是可能的。您需要控制索引代碼。 – Jayendra 2013-04-09 10:32:04

回答

1

聰明的問題!

我在很多應用程序中看到過相同的情況,這是每個人都犯的第一個錯誤。在Solr開箱即可使用,但我認爲你可以實現自己編寫的UpdateRequestProcessor

截至目前,這在配置中是不可能的,但你可以用空方法或只是一個日誌行覆蓋processCommit方法。這應該工作正常,除非自動提交使用相同的工作流程,這不應該是這樣,但我會檢查。無論如何,你可以輕鬆地測試這個。

一旦你寫你自己的組件,你必須將其提供給SOLR作爲一個罐子,並在更新請求處理器鏈配置它(solrconfig.xml):

<updateRequestProcessorChain> 
    <processor class="solr.NoCommitUpdateRequestProcessorFactory" /> 
    <processor class="solr.LogUpdateProcessorFactory" /> 
    <processor class="solr.RunUpdateProcessorFactory" /> 
</updateRequestProcessorChain> 

不要忘記過去兩年這些線是默認的請求處理器,否則所有的更新請求都無能爲力!

+0

我可以接受這個解決方案,但我認爲它有點難看:)但是再次,那不是你的錯。 如果我們在答案中加入了一個免責聲明,告訴人們如果他們讀到這個問題時不要這樣做,可以嗎? ;) 基本上只是在你的問題的頂部添加「至今這是不可能的,但你可以......」。 – 2013-04-09 13:08:05

+0

是的, 也許我們應該在Jira爲此打開一張票? 我會編輯你的答案並接受它。 :) – 2013-04-09 13:12:35

+0

我不會說這是你不應該做的。這是實現你想要的唯一方法,但你必須爲它編寫一些代碼。更新請求處理器是掛鉤solr更新工作流的好方法。創建一個問題並將其回饋給項目也會很好。 – javanna 2013-04-09 13:14:06

0

由於Solr的5.3(如果不是更早),您可以添加以下solrconfig.xml中:

<updateRequestProcessorChain name="ignore-commit-from-client" default="true"> 
    <processor class="solr.IgnoreCommitOptimizeUpdateProcessorFactory"> 
    <int name="statusCode">200</int> 
    </processor> 
    <processor class="solr.LogUpdateProcessorFactory" /> 
    <processor class="solr.DistributedUpdateProcessorFactory" /> 
    <processor class="solr.RunUpdateProcessorFactory" /> 
</updateRequestProcessorChain> 

參見:https://lucene.apache.org/solr/guide/6_6/shards-and-indexing-data-in-solrcloud.html#ShardsandIndexingDatainSolrCloud-IgnoringCommitsfromClientApplicationsinSolrCloud