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的服务器下运行)