zoukankan      html  css  js  c++  java
  • 索引的删除和更新

    【删除索引】

     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~
  • 相关阅读:
    debug: if (va=1) 和 if (va==1)的区别
    必定管用!关于如何在电脑上恢复itunes中的音乐库(Mac Windows统统适用)
    关于Matlab中自动生成的asv文件
    LaTeX表格字体大小控制
    ANSYS中应力强度因子与J积分的计算
    Notepad++取消输入单词时出现提示
    notepad++的apdl高亮xml文件
    Power Graphics
    19个必须知道的Visual Studio快捷键
    APDL命令流:将ansys分析结果输出为tecplot格式
  • 原文地址:https://www.cnblogs.com/zhzcode/p/9800825.html
Copyright © 2011-2022 走看看