转载请注明出处:[http://blog.csdn.net/xiaojimanman/article/details/44280311](http://blog.csdn.net/xiaojimanman/article/details/44280311)
[http://www.llwjy.com/blogdetail/e42fa5c3097f4964fca0fdfe7cd7a9a2.html](http://www.llwjy.com/blogdetail/e42fa5c3097f4964fca0fdfe7cd7a9a2.html)
个人的博客小站已经上线了,网址 [www.llwjy.com](#),欢迎大家来吐槽~
上一篇博客已经介绍了实时索引的检索功能,这个就相当于数据的的查询功能,我们都知道数据库的增删改查是最常用的四个功能,实时索引也是一样,他也有增删改查操作,这里就介绍一下实时索引的增删改操作,在实时索引管理类的那篇博客中,我们已经提到实时索引中的IndexWriter的操作都是委托给TrackingIndexWriter来操作的,TrackingIndexWriter中的方法和IndexWriter中的方法类似,都实现了索引的基本操作,下面就一一介绍下。
**索引名就可以将我实例化**
这里的NRTIndex和之前的NRTSearch类一样,都是根据索引名来实例化,在NRTIndex类中,我们定义两个属性,一个是TrackingIndexWriter对象,一个是索引名。因此NRTIndex的构造方法如下:
~~~
public NRTIndex(String indexName){
this.indexName = indexName;
indexWriter = IndexManager.getIndexManager(indexName).getTrackingIndexWriter();
}
~~~
**操作一条语句足够**
TrackingIndexWriter中的操作和IndexWriter一样简单,几乎都是一条语句足够了,下面我们分别看下增删改的操作语句:
~~~
//新增一条记录
indexWriter.addDocument(doc);
//删除符合条件的记录
indexWriter.deleteDocuments(query);
//所有的记录都不要了
indexWriter.deleteAll();
//按照条件更新记录
indexWriter.updateDocument(term, doc);
~~~
代码的实现就是如此简单,简简单单的一条语句就实现了索引的操作,当然这一切都要感谢Lucene的强大功能。
**我很懒的**
为了方便后面的操作,我们将这四个方法进行进一步的封装,使后续操作更加简单,NRTIndex类的源码如下:
~~~
/**
*@Description: 索引管理操作类,增删改三种操作
*/
package com.lulei.lucene.index.operation;
import java.io.IOException;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.NRTManager.TrackingIndexWriter;
import org.apache.lucene.search.Query;
import com.lulei.lucene.index.manager.IndexManager;
public class NRTIndex {
private TrackingIndexWriter indexWriter;
private String indexName;
//直接使用IndexManager中的indexWriter,将索引的修改操作委托给TrackingIndexWriter实现
public NRTIndex(String indexName){
this.indexName = indexName;
indexWriter = IndexManager.getIndexManager(indexName).getTrackingIndexWriter();
}
/**
* @param doc
* @return boolean
* @Author: lulei
* @Description: 增加Document至索引
*/
public boolean addDocument(Document doc){
try {
indexWriter.addDocument(doc);
return true;
} catch (IOException e){
e.printStackTrace();
return false;
}
}
/**
* @param query
* @return boolean
* @Author: lulei
* @Description: 按照Query条件从索引中删除Document
*/
public boolean deleteDocument(Query query){
try {
indexWriter.deleteDocuments(query);
return true;
} catch (IOException e) {
e.printStackTrace();
return false;
}
}
/**
* @return
* @Author: lulei
* @Description: 清空索引
*/
public boolean deleteAll(){
try {
indexWriter.deleteAll();
return true;
} catch (IOException e) {
e.printStackTrace();
return false;
}
}
/**
* @param term
* @param doc
* @return
* @Author: lulei
* @Description: 按照Term条件修改索引中Document
*/
public boolean updateDocument(Term term, Document doc){
try {
indexWriter.updateDocument(term, doc);
return true;
} catch (IOException e) {
e.printStackTrace();
return false;
}
}
/**
* @throws IOException
* @Author:lulei
* @Description: 合并索引
*/
public void commit() throws IOException {
IndexManager.getIndexManager(indexName).getIndexWriter().commit();
}
}
~~~
这里的对NRTIndex类的介绍就结束了,后面博客会对NRTSearch和NRTIndex类创建应用子类,是索引的操作更加简单。
ps:最近发现其他网站可能会对博客转载,上面并没有源链接,如想查看更多关于 [基于lucene的案例开发](http://www.llwjy.com/blogtype/lucene.html) 请[点击这里](http://blog.csdn.net/xiaojimanman/article/category/2841877)。或访问网址http://blog.csdn.net/xiaojimanman/article/category/2841877 或 http://www.llwjy.com/
- 前言
- 写在开始之前
- lucene初始认知
- 索引数学模型
- 索引文件结构
- 创建索引
- 搜索索引
- 分词器介绍
- Query查询
- IndexSearcher中检索方法
- 更新说明
- 案例初识
- JsonUtil & XmlUtil
- 基ClassUtil & CharsetUtil
- ParseUtil & ParseRequest
- 数据库连接池
- 实现实时索引基本原理
- 实时索引管理类IndexManager
- 实时索引的检索
- 实时索引的修改
- 查询语句创建PackQuery
- 纵横小说更新列表页抓取
- 纵横小说简介页采集
- 纵横小说章节列表采集
- 纵横小说阅读页采集
- 纵横小说数据库设计
- 纵横小说数据库操作
- 纵横小说分布式采集