2012-08-12 131 views
2

我有多個Java任務可以訪問solr並按順序寫入和提交一些文檔。通常這些任務會改變同一文件。我的問題是,一個任務可能會觸發一個提交,終止,將控制權傳遞給另一個任務,然後再發出另一個提交。當第二個任務開始之前沒有完成第一次提交時,我得到solr鎖定超時異常。同步Solr提交

我正在研究的一個解決方案是讓這些任務中的每一個都簡單地執行更新並且不提交。但問題在於,早期任務的更改對於後續任務不可見。因此後面的任務最終會覆蓋以前的一些更改。

現在,我正在調查是否可以在觸發下一個任務之前檢測到每個提交的結束。任何想法?

你們如何解決這個問題?

這些任務是我不能改變的現成的非平凡組件。

感謝, 最大

回答

3

這聽起來像你想有提交發生在「任務」後,在後臺終止。你最好同步做提交;即在提交成功(或失敗)之前不要終止任務。 (我承認我不使用Solr,我不知道如何將這些想法映射到Solr API。)

+0

是的,這是正確的。顯式Solr提交是默認同步的,所以你必須做一些不尋常的事情,比如waitSearcher = false來獲得其他行爲,或者你正在獨立的線程中執行不協調的任務。當您準備考慮Solr 4時,會出現一個新的所謂「實時獲取」功能,您可以在Solr中查詢添加了賭注但尚未搜索到的文檔。 – 2012-08-12 17:32:20

+0

您是否建議即使在使用HTTP時,Solr只會在提交完成後纔會釋放連接?不要短暫的HTTP超時是對此的挑戰嗎?任何有關此主題的參考將非常感謝。 – Klaus 2012-08-12 22:13:36

+0

是的......一個短暫的HTTP超時會是一個問題。但這是客戶的責任。客戶端應該檢查HTTP響應的狀態碼,並且如果由於超時而沒有得到響應,它不應該假定提交工作。設置太短的超時顯然會適得其反。 – 2012-08-13 00:52:34