我有以下步驟:在數據庫Solr的原子更新
- 更新記錄
- 添加記錄使用JSON
- 到Solr提交記錄在數據庫
我使用updatejson插入記錄用?commit = true調用 但是這一步需要很長時間。有沒有更好的方法來保持同步? 記錄需要存儲在solr中。我不介意它可以立即搜索。
我有以下步驟:在數據庫Solr的原子更新
我使用updatejson插入記錄用?commit = true調用 但是這一步需要很長時間。有沒有更好的方法來保持同步? 記錄需要存儲在solr中。我不介意它可以立即搜索。
我通過執行?解決了問題?commitWithin = 15000 這會持續數據,但不會合並數據與索引。它每15秒完成一次。足以不阻止我的過程。加載100000條記錄從幾天到幾個小時。
提交很貴。每次添加後都不要提交。您可以提交每個X請求(其中X取決於您的延遲要求和每秒寫入次數),或者每X分鐘執行一次提交。 (與/update?commit=true
)
有兩個方面:
爲了保持同步可靠,你需要做一些形式的two-phase commit。見
要做到這一點快,你應該這樣做分批爲阿倫在the other answer建議,並因爲它是suggested in Solrj documentation。如果您不需要立即可用於搜索的文檔,情況尤其如此。
您也可以嘗試使用soft commits,它比硬承諾便宜。請參閱"commit" and "optimize" in Solr documentation。網址將以update?softCommit=true
結尾。本文中有一個很好的軟和硬提交的討論:Understanding Transaction Logs, Soft Commit and Commit in SolrCloud。
當你說它很慢時,你的意思是說?commit = true會阻止你的進程?我做的是 –
。但我通過做一個?commitWithin = 15000 – broersa
來解決我的問題。 commitWithin的替代方法是waitSearcher = false&waitFlush = false。 –