代码改变世界

lucene 索引维护

2017-08-03 10:36  U歌  阅读(211)  评论(0)    收藏  举报

1.1      需求

图书信息在数据库发生变化,所以索引库相对应的也要发生增删改变化。

 

1.2      添加索引

参考入门程序的索引流程

IndexWriter.addDocument(document);

 

1.3      删除索引

增删改操作,都是需要通过IndexWriter对象来操作

1.3.1   根据条件删除

Term是索引域中最小的单位。根据条件删除时,建议根据唯一键来进行删除。在solr中就是根据ID来进行删除和修改操作的。

 1 @Test
 2     public void deleteIndex() throws Exception {
 3         // 创建分词器,标准分词器
 4         Analyzer analyzer = new StandardAnalyzer();
 5 
 6         // 创建IndexWriter
 7         IndexWriterConfig cfg = new IndexWriterConfig(Version.LUCENE_4_10_3,
 8                 analyzer);
 9         Directory directory = FSDirectory
10                 .open(new File("E:\\11-index\\hm19\\"));
11         // 创建IndexWriter
12         IndexWriter writer = new IndexWriter(directory, cfg);
13 
14         // Terms
15         // writer.deleteDocuments(new Term("id", "1"));
16 
17         // 删除全部(慎用)
18         writer.deleteAll();
19 
20         writer.close();
21     }
View Code

1.4      修改索引

 1 @Test
 2     public void updateIndex() throws Exception {
 3         // 创建分词器,标准分词器
 4         Analyzer analyzer = new StandardAnalyzer();
 5 
 6         // 创建IndexWriter
 7         IndexWriterConfig cfg = new IndexWriterConfig(Version.LUCENE_4_10_3,
 8                 analyzer);
 9 
10         Directory directory = FSDirectory
11                 .open(new File("E:\\11-index\\hm19\\"));
12         // 创建IndexWriter
13         IndexWriter writer = new IndexWriter(directory, cfg);
14 
15         // 第一个参数:指定查询条件
16         // 第二个参数:修改之后的对象
17         // 修改时如果根据查询条件,可以查询出结果,则将以前的删掉,然后覆盖新的Document对象,如果没有查询出结果,则新增一个Document
18         // 修改流程即:先查询,再删除,在添加
19         Document doc = new Document();
20         doc.add(new TextField("name", "lisi", Store.YES));
21         writer.updateDocument(new Term("name", "zhangsan"), doc);
22 
23         writer.close();
24     }
View Code