转删除Lucene索引
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了转删除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问题解决!
以上是关于转删除Lucene索引的主要内容,如果未能解决你的问题,请参考以下文章
如何使用Term或QueryParser从Lucene索引中删除文档