码迷,mamicode.com
首页 > Web开发 > 详细

【转】删除Lucene索引

时间:2016-03-21 12:05:36      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:

若需要从索引中删除某一个或者某一类文档,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索引

标签:

原文地址:http://www.cnblogs.com/Darkon/p/5300938.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!