项目结构大家可以先看看:lucene(全文搜索)_根据内容建立索引_源码下载
索引的恢复/更新操作
1 /**
2 * 把删除的索引进行恢复操作
3 */
4 public void recover() {
5 IndexReader reader = null;
6 try {
7 // readOnly默认为true,要把readOnly设置为false
8 reader = IndexReader.open(directory, false);
9 reader.undeleteAll();
10 } catch (CorruptIndexException e) {
11 e.printStackTrace();
12 } catch (IOException e) {
13 e.printStackTrace();
14 } finally {
15 if (reader != null) {
16 try {
17 reader.close();
18 } catch (IOException e) {
19 e.printStackTrace();
20 }
21 }
22 }
23 }
24
25 /**
26 * 清空回收站,也就是不能够恢复数据啦
27 */
28 public void forceMerge() {
29 IndexWriter writer = null;
30 try {
31 writer = new IndexWriter(directory,new IndexWriterConfig(Version.LUCENE_35,new StandardAnalyzer(Version.LUCENE_35)));
32 writer.forceMergeDeletes();
33 } catch (CorruptIndexException e) {
34 e.printStackTrace();
35 } catch (IOException e) {
36 e.printStackTrace();
37 } finally {
38 if (writer != null) {
39 try {
40 writer.close();
41 } catch (IOException e) {
42 e.printStackTrace();
43 }
44 }
45 }
46 }
47
48 /**
49 * 更新操作
50 */
51 public void update(){
52 IndexWriter writer = null;
53 try {
54 writer = new IndexWriter(directory,new IndexWriterConfig(Version.LUCENE_35,new StandardAnalyzer(Version.LUCENE_35)));
55
56 Document document = new Document();
57 document.add(new Field("id", "11", Field.Store.YES,
58 Field.Index.NOT_ANALYZED_NO_NORMS));
59 document.add(new Field("email", emails[0], Field.Store.YES,
60 Field.Index.NOT_ANALYZED));
61 document.add(new Field("content", contents[0], Field.Store.YES,
62 Field.Index.ANALYZED));
63 writer.updateDocument(new Term("id","1"), document);
64 } catch (CorruptIndexException e) {
65 e.printStackTrace();
66 } catch (IOException e) {
67 e.printStackTrace();
68 } finally {
69 if (writer != null) {
70 try {
71 writer.close();
72 } catch (IOException e) {
73 e.printStackTrace();
74 }
75 }
76 }
77 }
测试代码:
1 @Test
2 public void testDelete(){
3 LuceneUtil util = new LuceneUtil();
4 System.out.println("删除前 =======");
5 util.query();
6 util.delete();
7 System.out.println("删除后 =======");
8 util.query();
9 }
10
11 @Test
12 public void testRecover(){
13 LuceneUtil util = new LuceneUtil();
14 System.out.println("恢复前 ========");
15 util.query();
16 util.recover();
17 System.out.println("恢复后 ========");
18 util.query();
19 }
20
21 @Test
22 public void testUpdate(){
23 LuceneUtil util = new LuceneUtil();
24 System.out.println("更新前 ========");
25 util.query();
26 util.update();
27 System.out.println("更新后 ========");
28 util.query();
29 }