1 索引库维护
在第4节,我们需要重新创建索引的时候,是去索引库目录下,手动删除的。
而在实际的开发中,我们可能压根就不知道索引库在哪,就算知道,我们也不可能每次都去手动删除,非常之麻烦!!!
所以,我们必须学习如何维护索引库,使用程序来操作索引库。
需要注意的是,索引是与文档紧密相连的,因此对索引的维护,实际上就是对文档的增删改。
1.1 添加索引(文档)
1.1.1 需求
数据库中新上架了图书,必须把这些图书也添加到索引库中,不然就搜不到该新上架的图书了。
1.1.2 代码实现
调用 indexWriter.addDocument(doc)添加索引。
参考入门示例中的创建索引。
1.2 删除索引(文档)
1.2.1 需求
某些图书不再出版销售了,我们需要从索引库中移除该图书。
1.2.2 代码实现
@Test public void deleteIndex() throws Exception { // 1、指定索引库目录 Directory directory = FSDirectory.open(new File("F:\\lucene\\0719")); // 2、创建IndexWriterConfig IndexWriterConfig cfg = new IndexWriterConfig(Version.LATEST, new StandardAnalyzer()); // 3、 创建IndexWriter IndexWriter writer = new IndexWriter(directory, cfg); // 4、通过IndexWriter来删除索引 // 删除指定索引 writer.deleteDocuments(new Term("name", "apache")); // 5、关闭IndexWriter writer.close();
System.out.println("删除成功");
} |
1.2.3 清空索引库
@Test public void deleteIndex() throws Exception { // 1、指定索引库目录 Directory directory = FSDirectory.open(new File("F:\\lucene\\0719")); // 2、创建IndexWriterConfig IndexWriterConfig cfg = new IndexWriterConfig(Version.LATEST, new StandardAnalyzer()); // 3、 创建IndexWriter IndexWriter writer = new IndexWriter(directory, cfg); // 4、通过IndexWriter来删除索引 // 删除指定索引 writer.deleteAll(); // 5、关闭IndexWriter writer.close();
System.out.println("清空索引库成功");
} |
1.3 更新索引(文档)
1.3.1 说明
Lucene更新索引比较特殊,是先删除满足条件的索引,再添加新的索引。
1.3.2 代码实现
// 修改索引 @Test public void updateIndex() throws Exception { // 1、指定索引库目录 Directory directory = FSDirectory.open(new File("F:\\lucene\\0719")); // 2、创建IndexWriterConfig IndexWriterConfig cfg = new IndexWriterConfig(Version.LATEST, new StandardAnalyzer()); // 3、 创建IndexWriter IndexWriter writer = new IndexWriter(directory, cfg); // 4、通过IndexWriter来修改索引 // a)、创建修改后的文档对象 Document document = new Document();
// 文件名称 Field filenameField = new StringField("name", "updateIndex", Store.YES); document.add(filenameField);
// 修改指定索引为新的索引 writer.updateDocument(new Term("name", "apache"), document);
// 5、关闭IndexWriter writer.close();
System.out.println("更新成功"); } |