lucene中建立实时索引的方法

来源:互联网 发布:linux 网卡驱动位置 编辑:程序博客网 时间:2024/04/30 01:09

    以前看到网上一些方法都是说先建立内存索引,在定期将内存索引保存到磁盘,来实现实时的索引的功能。Lucene in action中也没提如何建立实时索引的方法,不过lucene3.0.3中加入了实时索引的API,可以大大简化建立实时索引的工作量,本人也是在偶尔翻阅lucene 的java doc中发现的。

   新的接口为IndexWriter.getReader() ,返回一个IndexReader对象,该对象可以cover所有IndexWriter已经commit和未commit的操作,因此在IndexWriter 将索引commit到磁盘之前,就可以索引到新加入的document.

  不过返回的IndexReader 无法获取索引是否已经变更的信息,通过IndexReader().getVersion() 获取的版本号每次都是一样的,无法区分索引是否已经更新.

  而通过IndexWriter.getReader()返回的IndexReader需要reopen才能获取到新的更新,为了避免每次查询都reopen,可以设置一个update标志,索引变更时update 设置为true, reopen后设置为false, 这样可以保证才索引更新时才去reopen.

  在多线程查询的情况下,对IndexReader的管理,可以参考lucene in action 10.2.2 Using threads for searching。