我對Lucene3.5實時搜索的一點兒整理

lucene3.5中,對於其近實時搜索,主要包括了兩個核心的東西, NRTManagerSearcherManager,記錄下本身的理解和認知。。。。。。

構建NRTManager,利用NRTManager,SearcherManager來實現近實時搜索
 其原理是:
 首先要說明2個問題,實時搜索包含兩部分:
 1可以將索引實時的提交commit,也就是咱們用到的IndexWriter對象的commit()操做   
2.可以將實時變化的索引信息經過搜索展示出來,也就是咱們用到的IndexSearcher類的getSearcher()方法。

實時更新:lucene3.5中,利用NRTManager來管理IndexWriter,經過暴露indexWriter的一些內部的方法,如增刪改查索引等,其操做全在內存裏面,可是其自身對索引的上述操做的方法裏,並無commit操做, 因此咱們若是不手動的調用commit操做的話,經過以上的操做,咱們真實存放的索引庫是不會變化的,因此咱們經過NRTManager暴露出來的那些方法操做時,最後要進行commit,這樣就會完成了實時更新。

 實時查詢:要想獲取用戶最新的索引信息,咱們能夠經過lucene3.5提供的另外一個查詢對象SearcherManager類來實現,咱們是能夠經過SearcherManager類獲取Indexsearch的,能夠經過調用其maybeReopen()方法來實現最新的索引搜索對象。 NRTManager對象提供了獲取SearcherManager的方法,而且也提供了maybeReopen方法,那麼咱們要達到目的,確定是咱們本身來有時間間隔的循環調用maybeReopen來查詢最新的查詢,  而lucene3.5裏,給咱們提供了一個後臺線程類,叫作NRTManagerReopenThread線程類,該線程負責實時跟蹤索引的內存變化,索引的每次變化其就會自動調用maybeReopen方法,保持最新的索引信息,經過每次變化就調用 maybeReopen方法,來獲取最新的IndexSearcher對象,而咱們所要的IndexSearcher對象就是NRTManager經過調用getSearcherManager方法得到SearcherManager對象,而後經過SearcherManager對象獲取IndexSearcher對象
 NRTManager->getSearcherManager()->SearcherManager->acquire()->IndexSearcher
 最後調用SearcherManager的release釋放IndexSearcher對象,而且要關閉NRTManagerReopenThread
相關文章
相關標籤/搜索