索引的删除和更新
【删除索引】
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~