2、学习lucene之索引删除、恢复删除、强制删除
本来想在这篇里把索引的优化和更新一起写,但写完标题后发现标题好长,所以在这里就暂时只写关于索引删除的内容吧。因为小弟学的也不深,所以写的也有些简单,还望见谅。
一、索引删除
关于索引删除,有两个类都可以完成,IndexWriter和IndexReader。当我了解到这个问题时,纠结了半天到底用哪个,后来问了谷老师,他帮我找到了答案,最好是用IndexWriter,为么啊?在我转来的那篇“Lucene中删除索引是用IndexWriter还是用IndexReader”中仔细写了原因,在此就不多说了。如何进行删除,分四步走战略。
1、创建Directory,索引的存放位置
2、创建IndexWriter
3、删除索引
4、关闭IndexWriter
附上代码:
下面代码中,删除的是建索引时,id的Field中,内容为1的记录。
package com.hlp.lucene.deleteIndex;import java.io.File;import java.io.IOException;import org.apache.lucene.analysis.Analyzer;import org.apache.lucene.analysis.standard.StandardAnalyzer;import org.apache.lucene.index.CorruptIndexException;import org.apache.lucene.index.IndexWriter;import org.apache.lucene.index.IndexWriterConfig;import org.apache.lucene.index.Term;import org.apache.lucene.store.Directory;import org.apache.lucene.store.FSDirectory;import org.apache.lucene.util.Version;/** * 功能:删除索引 * */public class DeleteIndex{ // 索引的存放位置 String luceneIndex = "G://lucene//luceneIndex2"; // 分词器 Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_35); public void delIndex() {IndexWriter indexWriter = null;try{ // 1、创建Directory,索引的存放位置 Directory directory = FSDirectory.open(new File(luceneIndex)); // 2、创建IndexWriter IndexWriterConfig iwConfig = new IndexWriterConfig(Version.LUCENE_35, analyzer); indexWriter = new IndexWriter(directory, iwConfig); // 3、删除索引,这样并不会完全删除,可以恢复 indexWriter.deleteDocuments(new Term("id", "1"));}catch (CorruptIndexException e){ e.printStackTrace();}catch (IOException e){ e.printStackTrace();}finally{ // 4、关闭IndexWriter if(null != indexWriter) {try{ indexWriter.close();}catch (IOException e){ e.printStackTrace();} }} // end finally } // end getIndexInfor}
上面这种方式执行完毕后,其实索引并没有完全删除,虽然搜索的时候已经搜索不到了,就貌似在电脑上删除文件后先放在回收站一样,其实,这个索引也被放在了lucene的“回收站”,可以进行恢复,除非再执行强制删除才会完全删除。
二、索引恢复
上面也谈到了,用上面方法删除的索引是可以进行恢复的。同样,也分为四步走战略。
1、创建Directory,索引的存放位置
2、创建IndexReader,必须把对索引的只读设置为false
3、恢复删除的索引内容
4、关闭IndexReader
以下是代码展示:
package com.hlp.lucene.deleteIndex;import java.io.File;import java.io.IOException;import org.apache.lucene.analysis.Analyzer;import org.apache.lucene.analysis.standard.StandardAnalyzer;import org.apache.lucene.index.CorruptIndexException;import org.apache.lucene.index.IndexReader;import org.apache.lucene.store.Directory;import org.apache.lucene.store.FSDirectory;import org.apache.lucene.util.Version;/** * 功能:恢复索引 * */public class UndeleteIndex{ // 索引的存放位置 String luceneIndex = "G://lucene//luceneIndex2"; // 分词器 Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_35); public void unDeleteIndex() {IndexReader indexReader = null;try{ // 1、创建Directory,索引的存放位置 Directory directory = FSDirectory.open(new File(luceneIndex)); // 2、创建IndexReader,必须把对索引的只读设置为false indexReader = IndexReader.open(directory, false); // 3、恢复删除的索引内容 indexReader.undeleteAll();}catch (CorruptIndexException e){ e.printStackTrace();}catch (IOException e){ e.printStackTrace();}finally{ // 4、关闭IndexReader try {indexReader.close(); } catch (IOException e) {e.printStackTrace(); }} // end finally }}
这样恢复删除后,会把所有在lucene“回收站”中的索引都恢复回去。
三、强制删除索引
上面所写的删除会先放到lucene“回收站”中,那么能不能一下就删除了呢?答案是可以的。下面就来演示下,用四步走方法。
1、创建Directory,索引的存放位置
2、创建IndexWriter
3、强制删除没有完全删除的索引
4、关闭IndexWriter
下面是代码演示:
package com.hlp.lucene.deleteIndex;import java.io.File;import java.io.IOException;import org.apache.lucene.analysis.Analyzer;import org.apache.lucene.analysis.standard.StandardAnalyzer;import org.apache.lucene.index.CorruptIndexException;import org.apache.lucene.index.IndexWriter;import org.apache.lucene.index.IndexWriterConfig;import org.apache.lucene.store.Directory;import org.apache.lucene.store.FSDirectory;import org.apache.lucene.store.LockObtainFailedException;import org.apache.lucene.util.Version;/** * 功能:强制删除索引 * */public class ForceDelete{ // 索引的存放位置 String luceneIndex = "G://lucene//luceneIndex2"; // 分词器 Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_35); public void forceDelIndex() {IndexWriter indexWriter = null;try{ // 1、创建Directory,索引的存放位置 Directory directory = FSDirectory.open(new File(luceneIndex)); // 2、声明IndexWriter // 2.1、声明IndexConfig对象 IndexWriterConfig iwConfig = new IndexWriterConfig(Version.LUCENE_35, analyzer); // 2.2、声明IndexWriter对象 indexWriter = new IndexWriter(directory, iwConfig); // 3、强制删除没有完全删除的索引 indexWriter.forceMergeDeletes();}catch (CorruptIndexException e){ e.printStackTrace();}catch (LockObtainFailedException e){ e.printStackTrace();}catch (IOException e){ e.printStackTrace();}finally{ // 4、关闭IndexWriter try {indexWriter.close(); } catch (CorruptIndexException e) {e.printStackTrace(); } catch (IOException e) {e.printStackTrace(); }} // end finally }}
如此一来,就可以直接把想删除的索引删掉了。
总结:
上面三节简单介绍了索引的删除、恢复删除、彻底删除的操作,写的比较简单,没有详细介绍,至于具体的操作和效果,建议自己去测试,发现问题后问下谷老师,查的过程中可能还会学到其他东西哦,我就是这么干的,呵呵。至于以上我写的有任何问题和错误之处的话,还望指正,共同学习,谢谢。
相关内容
-
学习写字楼新选择6000元主流配置
学习写字楼新选择6000元主流配置,,这种配置需要考虑双核心的办...
-
WPS里面PDF如何删除一页|word文档怎么去除多余
WPS里面PDF如何删除一页|word文档怎么去除多余的一页,WPS教程...
-
添加删除程序不能做如何添加和删除程序错误的解
添加删除程序不能做如何添加和删除程序错误的解决方案,,最近,一...
-
wps删除重复数据|WPS表格中,删除重复项,只保留
wps删除重复数据|WPS表格中,删除重复项,只保留一个数据,如何...
-
电脑什么文件不能删除文件|电脑中哪些文件不能
电脑什么文件不能删除文件|电脑中哪些文件不能删除,,电脑中哪...
-
苹果电脑Mac删除快捷键|Mac电脑删除快捷键
苹果电脑Mac删除快捷键|Mac电脑删除快捷键,,1. Mac电脑删除快...
-
Lucene学习之高亮显示
Lucene学习之高亮显示,索引,字符,在搜索引擎中我们经常会看到...
-
电脑内存的插槽在哪|电脑内存的插槽在哪个位置
电脑内存的插槽在哪|电脑内存的插槽在哪个位置,,1. 电脑内存的...
-
删除表格整行的快捷键|表格里怎么快捷键删除整
删除表格整行的快捷键|表格里怎么快捷键删除整行,,表格里怎么...
-
金蝶系统管理员删除|金蝶用户管理员删了怎么办
金蝶系统管理员删除|金蝶用户管理员删了怎么办,,1.金蝶用户管...
-
wps播放ppt取消大纲|wps删除幻灯片的背景,修改
wps播放ppt取消大纲|wps删除幻灯片的背景,修改母板,修改母板)...
-
电脑删除资料怎么恢复软件|电脑上删除的资料如
电脑删除资料怎么恢复软件|电脑上删除的资料如何恢复,,电脑上...
-
这种配置还不知道。它主要用于日常学习和娱乐,偶
这种配置还不知道。它主要用于日常学习和娱乐,偶尔玩游戏。,,CP...
-
彻底删除苹果电脑系统|苹果电脑删除了苹果系统
彻底删除苹果电脑系统|苹果电脑删除了苹果系统,,1. 苹果电脑删...
-
如何删除电脑上的用户|如何删除电脑上的用户名
如何删除电脑上的用户|如何删除电脑上的用户名和密码,,如何删...