基于lucene的案例开发:实时索引的修改

释放双眼,带上耳机,听听看~!

链接地址

个人的博客小站已经上线了,网址 链接地址,欢迎大家来吐槽~

      上一篇博客已经介绍了实时索引的检索功能,这个就相当于数据的的查询功能,我们都知道数据库的增删改查是最常用的四个功能,实时索引也是一样,他也有增删改查操作,这里就介绍一下实时索引的增删改操作,在实时索引管理类的那篇博客中,我们已经提到实时索引中的IndexWriter的操作都是委托给TrackingIndexWriter来操作的,TrackingIndexWriter中的方法和IndexWriter中的方法类似,都实现了索引的基本操作,下面就一一介绍下。

索引名就可以将我实例化

      这里的NRTIndex和之前的NRTSearch类一样,都是根据索引名来实例化,在NRTIndex类中,我们定义两个属性,一个是TrackingIndexWriter对象,一个是索引名。因此NRTIndex的构造方法如下:


1
2
3
4
5
1public NRTIndex(String indexName){
2   this.indexName = indexName;
3   indexWriter = IndexManager.getIndexManager(indexName).getTrackingIndexWriter();
4}
5

1
2
1  **操作一条语句足够**
2

      TrackingIndexWriter中的操作和IndexWriter一样简单,几乎都是一条语句足够了,下面我们分别看下增删改的操作语句:


1
2
3
4
5
6
7
8
9
1//新增一条记录
2indexWriter.addDocument(doc);
3//删除符合条件的记录
4indexWriter.deleteDocuments(query);
5//所有的记录都不要了
6indexWriter.deleteAll();
7//按照条件更新记录
8indexWriter.updateDocument(term, doc);
9

1
2
1      代码的实现就是如此简单,简简单单的一条语句就实现了索引的操作,当然这一切都要感谢Lucene的强大功能。
2

我很懒的

      为了方便后面的操作,我们将这四个方法进行进一步的封装,使后续操作更加简单,NRTIndex类的源码如下:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
1/**  
2 *@Description:  索引管理操作类,增删改三种操作
3 */
4package com.lulei.lucene.index.operation;  
5
6import java.io.IOException;
7
8import org.apache.lucene.document.Document;
9import org.apache.lucene.index.Term;
10import org.apache.lucene.search.NRTManager.TrackingIndexWriter;
11import org.apache.lucene.search.Query;
12
13import com.lulei.lucene.index.manager.IndexManager;
14  
15public class NRTIndex {
16 
17  private TrackingIndexWriter indexWriter;
18  private String indexName;
19 
20  //直接使用IndexManager中的indexWriter,将索引的修改操作委托给TrackingIndexWriter实现
21  public NRTIndex(String indexName){
22      this.indexName = indexName;
23      indexWriter = IndexManager.getIndexManager(indexName).getTrackingIndexWriter();
24  }
25 
26  /**
27   * @param doc
28   * @return boolean
29   * @Author: lulei  
30   * @Description:  增加Document至索引
31   */
32  public boolean addDocument(Document doc){
33      try {
34          indexWriter.addDocument(doc);
35          return true;
36      } catch (IOException e){
37          e.printStackTrace();
38          return false;
39      }
40  }
41 
42  /**
43   * @param query
44   * @return boolean
45   * @Author: lulei  
46   * @Description: 按照Query条件从索引中删除Document
47   */
48  public boolean deleteDocument(Query query){
49      try {
50          indexWriter.deleteDocuments(query);
51          return true;
52      } catch (IOException e) {
53          e.printStackTrace();
54          return false;
55      }
56  }
57 
58  /**
59   * @return
60   * @Author: lulei  
61   * @Description:  清空索引
62   */
63  public boolean deleteAll(){
64      try {
65          indexWriter.deleteAll();
66          return true;
67      } catch (IOException e) {
68          e.printStackTrace();
69          return false;
70      }
71  }
72 
73  /**
74   * @param term
75   * @param doc
76   * @return
77   * @Author: lulei  
78   * @Description: 按照Term条件修改索引中Document
79   */
80  public boolean updateDocument(Term term, Document doc){
81      try {
82          indexWriter.updateDocument(term, doc);
83          return true;
84      } catch (IOException e) {
85          e.printStackTrace();
86          return false;
87      }
88  }
89 
90  /**
91   * @throws IOException
92   * @Author:lulei  
93   * @Description: 合并索引
94   */
95  public void commit() throws IOException {
96      IndexManager.getIndexManager(indexName).getIndexWriter().commit();
97  }
98}
99

      这里的对NRTIndex类的介绍就结束了,后面博客会对NRTSearch和NRTIndex类创建应用子类,是索引的操作更加简单。
ps:最近发现其他网站可能会对博客转载,上面并没有源链接,如想查看更多关于 基于lucene的案例开发  请 http://www.aiuxian.com/catalog/p-322798.html。或访问网址http://blog.csdn.net/xiaojimanman/article/category/2841877http://https://www.daimajiaoliu.com/series/lucene_basic/www.llwjy.com/

给TA打赏
共{{data.count}}人
人已打赏
安全运维

OpenSSH-8.7p1离线升级修复安全漏洞

2021-10-23 10:13:25

安全运维

设计模式的设计原则

2021-12-12 17:36:11

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索