查看索引
使用 IndexWriter 类读取索引的相关信息
IndexWriter 虽然不是专门用来查看索引的工具,但是这个类的一些 get 方法也可以查看一些索引文档的相关信息。
例如 writer.getDirectory().toString();writer.numRamDocs(),writer.docCount() 方法。
使用 IndexReader 及其子类读取索引的信息
IndexReader 类专门用于读取索引信息的类,它是一个抽象类,含有 FilterIndexReader,MuliReader 、 ParallelReader 等子类。
IndexReader 类通过静态方法 open(String indexPath) 可以得到其子类。
使用 IndexReader 类可以获得某个索引的详细情况。例如,指定路径的索引是否存在,索引中包含的文档,索引中包含的词条,索引是否进行过优化。
删除索引中的文档
删除指定序号的文档
通过调用 IndexReader 类的 deleteDocument(int id) 方法,可以从索引中删除指定的序号的文档。
这个时候,索引的目录下会生成一个 del 得新文件。这个文件中存储了被删除了的文档的信息。
但是,文档并没有真正从索引文档中删除,只是做了已经被删除的标记,从而可以使之不能参与索引。
恢复被删除的文档
通过 IndexReader 类的 undeleteAll() 方法即可将所有的标记为已删除的文档都恢复过来。
物理删除文档
要从物理上删除索引中的文档,有如下两个步骤:
使用 IndexReader 做文档删除的标记,即调用 deleteDocument 的方法。
1, 执行 IndexWriter 的 optimize() 方法。
批量删除文档
1, 使用循环语句。
2, 调用 IndexReader 的 int deleteDocuments(Term term) 这个方法,可以删除指定 Term 的文档。因为 Lucene 建立的索引是倒排索引,是以文档编号和短语标志排列的,所以 Lucene 实现了按照 Term 去删除文档。但是这种方法,也只是做标记,并不真正地删除。
使用 IndexModifier 从索引中删除文档
IndexModifier 类是专门用于全面操作索引的类。是一个新类。这个类集成了 IndexWriter 和 IndexReader 两个类的方法,从而可以建立索引,查看索引,修改索引。
同时 IndexModifier 类是线程安全的。
更新索引
更新索引中的文档
更新的方法,先删除,后增加。
批量更新索引中的文档
批量更新的方法,不是一个一个地更新,而是先批量删除,再一个一个地添加。
也可以调用 IndexWriter 更新索引的方法:
Void updateDocument(Term term,Document doc,Analyzer analyzer);
Void updateDocument(Term term,Document doc)