添加索引
调用 indexWriter.addDocument(doc)添加索引。
修改索引更新索引是先删除再添加,建议对更新需求采用此方法并且要保证对已存在的索引执行更新,可以先查 询出来,确定更新记录存在执行更新操作。 如果更新索引的目标文档对象不存在,则执行添加。
@Test
public void testIndexUpdate() throws Exception {
// 创建分词器
Analyzer analyzer = new StandardAnalyzer();
// 创建Directory流对象
Directory directory = FSDirectory.open(Paths.get("E:\\luceneJdDir"));
// 创建IndexWriteConfig对象,写入索引需要的配置
IndexWriterConfig config = new IndexWriterConfig(analyzer);
// 创建写入对象
IndexWriter indexWriter = new IndexWriter(directory, config);
// 创建Document
Document document = new Document();
document.add(new StringField("id", "1", Field.Store.YES));
document.add(new TextField("title", "测试修改", Field.Store.YES));
// 执行更新,会把所有符合条件的Document删除,再新增。
indexWriter.updateDocument(new Term("id", "1"), document);
indexWriter.close();
}
删除索引
删除指定索引
根据Term项删除索引,满足条件的将全部删除。 indexWriter.deleteDocuments(new Term(“id”, “3”));
@Test
public void testIndexDelete() throws Exception {
// 创建Directory流对象
Directory directory = FSDirectory.open(Paths.get("E:\\luceneJdDir"));
// 创建IndexWriteConfig对象,写入索引需要的配置
IndexWriterConfig config = new IndexWriterConfig();
// 创建写入对象
IndexWriter indexWriter = new IndexWriter(directory, config);
// 根据Term删除索引库,name:java
indexWriter.deleteDocuments(new Term("id", "3"));
// 释放资源
indexWriter.close();
}
删除全部索引(慎用)
将索引目录的索引信息全部删除,直接彻底删除,无法恢复。 建议参照关系数据库基于主键删除方式,所以在创建索引时需要创建一个主键Field,删除时根据此主键 Field删除。 索引删除后将放在Lucene的回收站中,Lucene3.X版本可以恢复删除的文档,3.X之后无法恢复。 indexWriter.deleteAll();
@Test
public void testIndexDeleteAll() throws Exception {
// 创建Directory流对象
Directory directory = FSDirectory.open(Paths.get("E:\\luceneJdDir"));
// 创建IndexWriteConfig对象,写入索引需要的配置
IndexWriterConfig config = new IndexWriterConfig();
// 创建写入对象
IndexWriter indexWriter = new IndexWriter(directory, config);
// 全部删除
indexWriter.deleteAll();
// 释放资源
indexWriter.close();
}