2012-02-21 75 views
4

它在Lucene文檔中聲明,在應用程序中使用IndexWriter和IndexSearcher的一個實例是最快的。在應用程序的整個生命週期內保持Lucene IndexWriter&IndexSearcher打開的好習慣

目前,我在任何時候都開放的IndexWriter靜態實例,並保持隨時開放,但如果IndexWriter執行對指數的任何CRUD操作時重建的IndexSearcher一個靜態實例。我在我的索引管理類上實現了Dispose方法,該方法在應用程序結束時關閉IndexWriterIndexSearcher(但是它是一個Web應用程序,因此這可能需要幾個月的時間才能運行)。

這聽起來像合理的方式去做事嗎?並且還使用靜態實例提出多線程問題..?即我應該在使用時鎖定我的作家和搜索者嗎?

回答

6

Lucene索引編寫器,讀取器和搜索器是線程安全的(請參閱2nd note of the doc of IndexWriter例如或1st of the doc of IndexSearcher),因此跨多個線程重複使用相同的實例沒有問題。

根據你如何管理指數的作家和搜索的描述,我覺得你重新實現的Lucene的兩個實用類,可能對您有用:NRTManagerSearcherManager,這使得它非常容易管理近乎實時搜索。

+0

好的謝謝你的信息,這很好,他們是線程安全的。我會研究你提到的課程。 – jcvandan 2012-02-21 16:07:11

+2

java-和c#-implementation之間是否有區別?還是它一樣? – xforfun 2015-10-07 07:10:36

相關問題