索引的删除和更新

【删除索引】

 1     /**
 2      * 测试删除索引
 3      */
 4     @Test
 5     public void testDelete(){
 6         IndexWriter writer = null;
 7                 
 8         try {
 9             //1、创建Directory
10             Directory directory = FSDirectory.open(new File("E:\lucene\index2"));
11             
12             //2、创建Writer
13             IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_35, new StandardAnalyzer(Version.LUCENE_35));
14             writer = new IndexWriter(directory,config);
15             
16             //删除文件的索引
17             //删除并不是真的删除,删除的索引信息会被存储到.del(相当于windows的回收站)文件
18             writer.deleteDocuments(new Term("id","2"));
19         } catch (IOException e) {
20             // TODO Auto-generated catch block
21             e.printStackTrace();
22         }
23         finally{
24             if(writer != null){
25                 try {
26                     writer.close();
27                 } catch (CorruptIndexException e) {
28                     // TODO Auto-generated catch block
29                     e.printStackTrace();
30                 } catch (IOException e) {
31                     // TODO Auto-generated catch block
32                     e.printStackTrace();
33                 }
34             }
35         }
36     }

【恢复删除】

【】 1     /**
 2      * 恢复删除
 3      */
 4     @Test
 5     public void testUnDelete(){
 6         IndexReader reader = null;
 7         
 8         try {
 9             //1、创建Directory
10             Directory directory = FSDirectory.open(new File("E:\lucene\index2"));
11             
12             //2、创建IndexReader
13             //默认情况下是只读的,如果执行恢复操作,Reader必须设置为false
14             reader = IndexReader.open(directory, false);
15             
16             
17             //恢复所有删除
18             reader.undeleteAll();            
19         } catch (IOException e) {
20             // TODO Auto-generated catch block
21             e.printStackTrace();
22         }
23         finally{
24             if(reader != null){
25                 try {
26                     reader.close();
27                 } catch (IOException e) {
28                     // TODO Auto-generated catch block
29                     e.printStackTrace();
30                 }
31             }
32         }
33     }

【完全删除索引】

 1     /**
 2      * 完全删除索引
 3      * forceMergeDeletes()方法是对已经执行deleteDocuments()的索引进行删除
 4      * 完全删除是不可恢复的
 5      */
 6     @Test
 7     public void testForceMergeDeletes(){
 8         IndexWriter writer = null;
 9         
10         try {
11             //1、创建Directory
12             Directory directory =FSDirectory.open(new File("E:\lucene\index2"));
13             
14             //2、创建IndexWriter
15             IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_35, new StandardAnalyzer(Version.LUCENE_35));
16             writer = new IndexWriter(directory,config);
17             
18             //删除索引
19             //lucene3.5之前使用optimize()方法进行索引的删除
20             //lucene3.5之后使用forceMergeDeletes()
21             writer.forceMergeDeletes();
22             
23         } catch (IOException e) {
24             // TODO Auto-generated catch block
25             e.printStackTrace();
26         }
27         finally{
28             if(writer != null)
29                 try {
30                     writer.close();
31                 } catch (CorruptIndexException e) {
32                     // TODO Auto-generated catch block
33                     e.printStackTrace();
34                 } catch (IOException e) {
35                     // TODO Auto-generated catch block
36                     e.printStackTrace();
37                 }
38         }        
39     }

【合并索引】

 1     /**
 2      * 合并索引
 3      * 合并索引一般不用手动操作。Lucene会自动执行索引的管理工作
 4      */
 5     @Test
 6     public void testForceMerge(){
 7         IndexWriter writer=null;
 8         
 9         try {
10             //1、创建Dierecotry对象
11             Directory directory = FSDirectory.open(new File("E:\lucene\index2"));
12             
13             //2、创建Writer对象
14             IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_35, new StandardAnalyzer(Version.LUCENE_35));
15             writer = new IndexWriter(directory,config);
16             
17             //合并索引
18             writer.forceMerge(1);
19         } catch (IOException e) {
20             // TODO Auto-generated catch block
21             e.printStackTrace();
22         }
23         finally{
24             if(writer != null)
25                 try {
26                     writer.close();
27                 } catch (CorruptIndexException e) {
28                     // TODO Auto-generated catch block
29                     e.printStackTrace();
30                 } catch (IOException e) {
31                     // TODO Auto-generated catch block
32                     e.printStackTrace();
33                 }
34         }
35     }

【更新索引】

 1     /**
 2      * 更新索引
 3      */
 4     @Test
 5     public void testUpdateDocument(){
 6         IndexWriter writer = null;
 7         
 8         try {
 9             //1、创建Directory对象
10             Directory directory = FSDirectory.open(new File("E:\lucene\index2"));
11             
12             //2、创建Writer对象
13             IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_35, new StandardAnalyzer(Version.LUCENE_35));
14             writer = new IndexWriter(directory,config);
15             
16             //修改指定Document的内容
17             Document doc = new Document();
18             doc.add(new Field("id","1",Field.Store.YES,Field.Index.NOT_ANALYZED_NO_NORMS));
19             doc.add(new Field("title","Are you ok",Field.Store.YES,Field.Index.NOT_ANALYZED));
20             doc.add(new Field("author","Mike",Field.Store.YES,Field.Index.NOT_ANALYZED));
21             doc.add(new Field("content", "Hello EveryOne, Are you ok? good",Field.Store.NO,Field.Index.ANALYZED));
22             
23             writer.updateDocument(new Term("id","1"), doc);
24         } catch (IOException e) {
25             // TODO Auto-generated catch block
26             e.printStackTrace();
27         }
28         finally{
29             if(writer != null)
30                 try {
31                     writer.close();
32                 } catch (CorruptIndexException e) {
33                     // TODO Auto-generated catch block
34                     e.printStackTrace();
35                 } catch (IOException e) {
36                     // TODO Auto-generated catch block
37                     e.printStackTrace();
38                 }
39         }
40     }
每接触一个新领域,我就像一块掉进水里的海绵,四面八方的养分都让我不断充实。O(∩_∩)O~
原文地址:https://www.cnblogs.com/zhzcode/p/9800825.html