若需要从索引中删除某一个或者某一类文档,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问题解决!
时间: 2024-11-07 12:30:34