转删除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索引中删除文档

lucene学习笔记一:lucene是什么实现步骤以及索引的创建查询修改删除

lucene4

.NET开发过程中的全文索引使用技巧之Solr(转)

Lucene索引维护(添加修改删除)

Javalucene4.0学习心得