删除Lucene索引

若需要从索引中删除某一个或者某一类文档,IndexReader提供了两种方法:

reader.DeleteDocument(int docNum)

reader.DeleteDocuments(Term term)。

前者是根据文档的编号来删除该文档,docNum是该文档进入索引时Lucene的编号,是按照顺序编的;后者是删除满足某一个条件的多个文档。

在执行了DeleteDocument或者DeleteDocuments方法后,系统会生成一个*.del的文件,该文件中记录了删除的文档,但并未从物理上删除这些文档。indexWriter.Optimize();才会真正的删除。

String indexDirStr = "d:\\index";
Directory indexDir = FSDirectory.getDirectory(new File(indexDirStr));
IndexReader reader = IndexReader.open(indexDir);
reader.deleteDocuments(new Term("id", String.valueOf(id)));
reader.flush();
reader.close();

注意new Term()中的id必须是Field.Index.TOKENIZED,不然无法搜索到就删除不了了。

另外注意一个问题是,我的lucene2.2版本删除后会在IndexReader.open时会出错!!换用新版的lucene2.9问题解决!




fatkun

14条评论

发表评论

电子邮件地址不会被公开。