我目前正致力於改進應用程序的索引速度,因爲我沒有完全控制執行索引的代碼。我發現索引代碼在每個文檔之後提交了一個提交,這是我爲了性能原因而想要避免的。在Solr中禁用顯式提交
問:
是否有可能在Solr中禁用所有提交從 客戶明確提出,而僅依靠汽車犯Solr的配置配置?
我目前正致力於改進應用程序的索引速度,因爲我沒有完全控制執行索引的代碼。我發現索引代碼在每個文檔之後提交了一個提交,這是我爲了性能原因而想要避免的。在Solr中禁用顯式提交
問:
是否有可能在Solr中禁用所有提交從 客戶明確提出,而僅依靠汽車犯Solr的配置配置?
聰明的問題!
我在很多應用程序中看到過相同的情況,這是每個人都犯的第一個錯誤。在Solr開箱即可使用,但我認爲你可以實現自己編寫的UpdateRequestProcessor
。
截至目前,這在配置中是不可能的,但你可以用空方法或只是一個日誌行覆蓋processCommit
方法。這應該工作正常,除非自動提交使用相同的工作流程,這不應該是這樣,但我會檢查。無論如何,你可以輕鬆地測試這個。
一旦你寫你自己的組件,你必須將其提供給SOLR作爲一個罐子,並在更新請求處理器鏈配置它(solrconfig.xml
):
<updateRequestProcessorChain>
<processor class="solr.NoCommitUpdateRequestProcessorFactory" />
<processor class="solr.LogUpdateProcessorFactory" />
<processor class="solr.RunUpdateProcessorFactory" />
</updateRequestProcessorChain>
不要忘記過去兩年這些線是默認的請求處理器,否則所有的更新請求都無能爲力!
我可以接受這個解決方案,但我認爲它有點難看:)但是再次,那不是你的錯。 如果我們在答案中加入了一個免責聲明,告訴人們如果他們讀到這個問題時不要這樣做,可以嗎? ;) 基本上只是在你的問題的頂部添加「至今這是不可能的,但你可以......」。 – 2013-04-09 13:08:05
是的, 也許我們應該在Jira爲此打開一張票? 我會編輯你的答案並接受它。 :) – 2013-04-09 13:12:35
我不會說這是你不應該做的。這是實現你想要的唯一方法,但你必須爲它編寫一些代碼。更新請求處理器是掛鉤solr更新工作流的好方法。創建一個問題並將其回饋給項目也會很好。 – javanna 2013-04-09 13:14:06
由於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>
不認爲這是可能的。您需要控制索引代碼。 – Jayendra 2013-04-09 10:32:04