2011-07-13 102 views
4

當我重新編制索引應用程序的數據庫數據並且同時執行搜索時,運行搜索的線程將進入休眠狀態,直到重新索引爲止完成。我假設索引方法是線程安全的,以防止在索引時更改數據。在Lucene中是否有任何內置的方法可以使它只響應搜索(數據沒有被更改)?或者我應該開始考慮自己的事情?我正在Tomcat服務器上運行我的應用程序。在使用Lucene索引期間搜索沒有響應

感謝,託梅爾

+0

同時寫入和讀取索引應該沒有問題。讀者只會看到提交的數據(除非您使用的是近實時搜索)。你所描述的應該起作用。您能否給我們提供遇到此問題的示例代碼? – sisve

回答

1

我假設你實際上是重建指數(或從頭重新索引一切,而不是重新索引單個文檔)。索引正在重建時,您無法對其執行查詢,因爲它不處於一致狀態。

通常使用的最簡單的解決方案是在後臺重建索引(同時仍對舊的查詢執行查詢),然後將其替換爲新的索引。

如果您遇到的問題與頻繁發生的服務器崩潰有關,則可能需要查看一些更系統的方法,例如Zoie中實施的方法 - 它會記錄後續索引請求,以便它可以恢復從索引的最後一個正確的快照。

+0

Lucene中有沒有內置的「Copy on write」機制? – tomericco

+0

我不知道在Lucene中有任何這樣的機制。管理索引被傳遞給應用程序或搜索服務器(Solr/ES)。我認爲,例如[Solr的多核支持](http://wiki.apache.org/solr/CoreAdmin)可用於此目的。 –