索引的删除和更新

摘要:
=Null){25try{26reader.close();27}catch{28//TODOAuto-generatedcatchblock29e.printStackTrace(),30}31}32}33}1/*2*完全删除索引3*forceMergeDelete()方法是删除已删除的索引Documents()4*完全删除不可恢复5*/6@Test7publicvoidtestForceMergeDeletes(){8IndexWriter=null;910try{11//1.创建Directory12Directorydirectory=FSDirectory.open;1314//2.创建IndexWriter15IndexWriterConfig=newIndexWriter配置;16writer=newIndexMriter;1718//删除索引19//在lucene 3.5之前,使用optimize()方法删除索引20//在lucene3.5之后,使用forceMergeDeletes()21writer.forceMergeDelete();2223}catch{24//TODOAuto-generatedcatchblock25e.printStackTrace();26}27最后{28if(writer!=null)29尝试{30writer.close();31}catch{32//TODOAauto-generatedcatchblock33e.printStack Trace(。

【删除索引】

 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     }

免责声明:文章转载自《索引的删除和更新》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇JAVA虚拟机体系结构数据字典管理思路下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Java从入门到实战之(26)Java网络实例之练习

1、获取指定主机的IP地址 如何使用 InetAddress 类的 InetAddress.getByName() 方法来获取指定主机(网址)的IP地址? package Java_Learn.File; import java.net.InetAddress; import java.net.UnknownHostException; public...

【转】DELPHI 线程类

原文地址:http://yyimen.blog.163.com/blog/static/179784047201211811178223/ Delphi中有一个线程类TThread是用来实现多线程编程的,这个绝大多数Delphi书藉都有说到,但基本上都是对TThread类的几个成员作一简单介绍,再说明一下Execute的实现和Synchronize的用法就...

macOS 上安装 PECL

一、简介 PECL(The PHP Extension Community Library)是 PHP 扩展的存储库,为 PHP 所有的扩展提供提供托管和下载服务。 通过 PEAR(PHP Extension and Application Repository)的 Package Manager 的安装管理方式,可以对 PECL 扩展进行下载和安装。...

文件的上传&预览&下载学习(一)

注:主要是说明后端逻辑和数据库表设计 1.当前主流的几种文件上传&预览&下载方式 把文件直接存储在服务器 分布式存储OSS,比如阿里OSS、Minio 2.数据库表设计 由于文件都是跟业务关联的,比如评论里面掺杂评论图片,常规的设计就是在'评论表'添加上传'图片名称'字段和'图片相对路径',在上传成功后返回给前端 1.1 如果是加入多个...

springBoot--Redis配置与使用

SpringBoot自动配置redis,主要是两个自动配置类 缓存管理器配置类:org.springframework.boot.autoconfigure.cache.RedisCacheConfiguration redis封装了工具RedisTemplate自动配置:org.springframework.boot.autoconfigure.da...

C#:MapControl基本操作代码整理

整理了 MapConrol各基本功能的实现代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Windows.Forms; using ESRI.ArcGI...