public static void deleteIndex() throws Exception{
Directory directory = FSDirectory.open(Paths.get("D:\\Freemarkfiles\\lucene01"));
SmartChineseAnalyzer analyzer=new SmartChineseAnalyzer();
IndexWriterConfig conf=new IndexWriterConfig(analyzer );
IndexWriter iwriter =new IndexWriter(directory, conf);
//term就是一个unit单元,完整的条件iwriter.deleteDocuments(new Term("filename","lu01."));
iwriter.deleteDocuments(new Term("filename","lu01.txt"));//filename=lu02.txt
//把上面生成的del文件(回收站)也删掉,不再恢复
// iwriter.forceMergeDeletes();
iwriter.close();
directory.close();
}
上面代码的功能是lucene里面索引的删除。
注意点:lucene里面删除索引也是更新操作,更新操作都要使用IndexWriter来操作,默认使用iwriter.deleteDocuments()方法删除索引之后,lucene还有个索引回收站机制,这个回收站机制就是lucene索引目录下面的.del文件。使用iwriter.forceMergeDeletes();方法从回收站彻底删除索引。
lucene里面索引的更新实质上就是先删除索引里面的Document,再新增这个Document对象,只不过是提供了updateDocument()这个方法来简化了你的删除、新增操作为一步罢了,下面是简单的更新索引的java代码:
public static void updateIndex() throws Exception{
Directory directory = FSDirectory.open(Paths.get("D:\\Freemarkfiles\\lucene01"));
SmartChineseAnalyzer analyzer=new SmartChineseAnalyzer();
IndexWriterConfig conf=new IndexWriterConfig(analyzer );
IndexWriter iwriter =new IndexWriter(directory, conf);
Document document=new Document();
document.add(new StringField("id", "222", Field.Store.YES));
document.add(new StringField("docurl", "f:\\test\\a.txt", Field.Store.YES));
document.add(new StringField("filename", "a.txt", Field.Store.YES));
document.add(new TextField("content", new FileReader("")));
document.add(new StringField("zhaiyao","some brief info of its conent", Field.Store.YES));
iwriter.updateDocument(new Term("filename","lu01.txt"),document);
iwriter.close();
directory.close();
}
iwriter.updateDocument(new Term(“filename”,“lu01.txt”),document);第一个参数指定要更新的文档,第二个参数是更新后的文档内容。