Lucene搜索引擎开发高级部分2(索引的管理)

Lucene搜索引擎开发高级部分(索引的管理)

1,查看索引的信息

通过IndexWriter类读取索引的相关信息,将其显示出来。

通过IndexReader及其子类读取索引的相关信息,将其显示出来。

通过可视化工具(Luke,Limo)查看索引的相关信息。

2,删除索引中的文档

删除指定序号的文档:

使用IndexReader类的deleteDocument(int id)可以从索引中删除指定序号的文档。但是,被删除的文档并没有 真正的从索引中删除,只是做了删除标记,不参加检索!

恢复已删除的文档:

使用deleteDocument方法并没有真正的删除指定的文档,所以可以恢复,调用undeleteAll()方法。

物理文档的删除:

第一步:使用IndexReader的deleteDocument方法标记删除

第二步:使用IndexWriter的optimize方法

3,更新索引中的文档

更新无非就是先删除再增加

索引的更新也是,先删除原来的指定索引,然后在增加。

要注意的是:当你删除一个文档索引时,他后面索引的序号会减1,再增加进来的索引文档序号为最后一个。

批量更新:

IndexWriter类的方法:void updateDocument(Term term,Document doc,Analyzer analyzer)

      void updateDocument(Term term,Document doc)

首先批量删除对应的Term,然奇批量增加对应的Document

4,索引的同步

这就涉及到并发访问了。Lucene保持索引操作线程安全性的原则是IndexReader,IndexWriter,IndexModifier三个类不能同时对同一个索引进行操作。也就是一类操作完成,马上调用close(),然后再调用下一个类。

索引锁机制:

提供两种锁:

1,write.lock  文件阻止进程同时修改一个索引。

2,commit.lock 读取和合并索引块的时候,会用到这个锁,他是一个事务锁。

这两中锁都是Lucene自动创建的。

5,使用可视化工具管理索引

Luke  主要是使用(他是一个jar文件[lukeall-3.5.0.jar],双击打开或者用命令行打开)

Limo  主要是使用(他是一个war文件[limo-0.61.war],需要放到jsp的服务器下运行)

猜你喜欢

转载自oaksun.iteye.com/blog/1759642