我对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

你可能感兴趣的:(Lucene3.5实时搜索)