一、demo

  • 本例中采用单元测试,故在pom.xml中引入junit jar包
  • 1.1  前提:
public class IndexTest {

/**
 *数据准备
 */
private String ids[] = { "1", "2", "3" };
private String citys[] = { "qingdao", "nanjing", "shanghai" };
private String descs[] = { "Qingdao is a beautiful city.", "Nanjing is a city of culture.",
"Shanghai is a bustling city." }; @Before
public void setUp() throws IOException {
IndexWriter indexWriter = getIndexWiter(); for (int i = 0; i < ids.length; i++) {
Document document = new Document();
document.add(new StringField("id", ids[i], Field.Store.YES));
document.add(new StringField("city", citys[i], Field.Store.YES));
document.add(new StringField("desc", descs[i], Field.Store.NO));
indexWriter.addDocument(document);
} indexWriter.close();
} /**
* 实例化IndexWiter
*
* @return
* @throws IOException
*/
private IndexWriter getIndexWiter() throws IOException {
Directory dir = FSDirectory.open(Paths.get("E:\\lucene2"));
Analyzer analyzer = new StandardAnalyzer();
IndexWriterConfig conf = new IndexWriterConfig(analyzer);
IndexWriter indexWriter = new IndexWriter(dir, conf); return indexWriter;
} }
  • 1.2      测试写入

    /**
* 测试写了几个文档
*
* @throws IOException
*/
@Test
public void tesWritert() throws IOException {
IndexWriter indexWriter = getIndexWiter(); System.out.println("一共写了" + indexWriter.numDocs() + "个文档");
indexWriter.close();
}

结果:

    •   使用luke查看索引文件

  1.3  测试读取

  • 由于进行了1.2 测试写入,所以要把索引文件清理一下,因为此步骤也会产生索引文件
    /**
* 测试读取了多少文档
* @throws IOException
*/
@Test
public void testReader() throws IOException {
IndexWriter indexWriter=getIndexWiter();
System.out.println("最大文档数为:"+indexWriter.maxDoc());
System.out.println("当前文档数为:"+indexWriter.numDocs());
indexWriter.close();
}

结果:

  1.4  测试删除 在合并前

  • 由于进行了1.3 测试写入,所以要把索引文件清理一下,因为此步骤也会产生索引文件
    /**
* 测试删除 在合并前
* @throws IOException
*/
@Test
public void testDeleteBeforeMerge() throws IOException {
IndexWriter indexWriter=getIndexWiter();
indexWriter.deleteDocuments(new Term("id","1"));
System.out.println("删除前。。。。。"+indexWriter.numDocs()+"个文件");
indexWriter.commit();
System.out.println("writer.maxDoc():"+indexWriter.maxDoc());
System.out.println("writer.numDocs():"+indexWriter.numDocs());
indexWriter.close();
}

结果:

  • 上图可知,虽然indexWriter.deleteDocuments(new Term("id","1")); 删除了document,但是索引文件中不会立即删除。
  •   1.5  测试删除 在合并后

  • 由于进行了1.4 测试写入,所以要把索引文件清理一下,因为此步骤也会产生索引文件
  • 测试删除 在合并后,用强制删除的方法会立即在索引表删除文档,
    这种方法比较耗cpu,建议数据量不大的系统使用,数据量大的系统建议不写indexWriter.forceMergeDeletes(); 就不会立即删除文档
    /**
* 测试删除 在合并后,用强制删除的方法会立即在索引表删除文档,
* 这种方法比较耗cpu,建议数据量不大的系统使用,数据量大的系统建议不写indexWriter.forceMergeDeletes(); 就不会立即删除文档
* @throws IOException
*/
@Test
public void testDeleteAfterMerge() throws IOException {
IndexWriter indexWriter=getIndexWiter();
indexWriter.deleteDocuments(new Term("id","1"));
System.out.println("删除前。。。。。"+indexWriter.numDocs()+"个文件");
indexWriter.forceMergeDeletes(); // 强制删除
indexWriter.commit();
System.out.println("writer.maxDoc():"+indexWriter.maxDoc());
System.out.println("writer.numDocs():"+indexWriter.numDocs());
indexWriter.close();
}

结果:

  • 如图可知,立即在索引表删除文档,这种方式比较耗cpu,建议数据量不大的系统使用,数据量大的系统建议不写indexWriter.forceMergeDeletes(); 就不会立即删除文档。
  •   1.6  测试更新

  • 由于进行了1.5 测试写入,所以要把索引文件清理一下,因为此步骤也会产生索引文件
    /**
* 测试更新
* @throws Exception
*/
@Test
public void testUpdate()throws Exception{
IndexWriter writer=getIndexWiter();
Document doc=new Document();
doc.add(new StringField("id", "1", Field.Store.YES));
doc.add(new StringField("city","qingdao",Field.Store.YES));
doc.add(new TextField("desc", "dsss is a city.", Field.Store.NO));
writer.updateDocument(new Term("id","1"), doc);
writer.close();
}

结果:

(三)Lucene之删除更新文档以及luke的基本使用的更多相关文章

  1. MongoDB(五):更新文档、删除文档

    1. 更新文档 MongoDB的uptade()和save()方法用于将集合中的文档更新.update()方法更新现有文档中的值,而save()方法是传递文档数据替换现有文档.从3.2版本开始,Mon ...

  2. Mongodb(3)插入文档,更新文档,删除文档

    insert() 方法 要插入数据到 MongoDB 集合,需要使用 MongoDB 的  insert() 或 save() 方法. 插入文档:db.COLLECTION_NAME.insert(d ...

  3. MongoDB 教程(七):插入文档、更新文档、删除文档

    MongoDB 插入文档 文档的数据结构和JSON基本一样. 所有存储在集合中的数据都是BSON格式 —— BSON是一种类json的二进制形式的存储格式,简称Binary JSON. MongoDB ...

  4. 段合并 segments merge 被删除的文档的删除时间

    2.5 段合并 每个索引分为多个“写一次,读多次”的段 write once and read many times  segments 建立索引时,一个段写入磁盘以后就不能更新:被删除的文档的信息存 ...

  5. MongoDB 数据库、集合创建删除与文档插入

    本文章主要介绍mongodb的基本命令,前提条件,你的本地已经安装了mongo. 一.基本命令使用(主要是创建,增删改.) 0.mongoDb统计信息 获得关于MongoDB的服务器统计,需要在Mon ...

  6. MongoDB更新文档

    说明:来看一下关系型数据库的update语句 UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某 其中where子句就类似查询文本,定位要更改的子表,set子句类似于修改器,更 ...

  7. ES4:ElasticSearch 使用C#添加和更新文档

    这是ElasticSearch 2.4 版本系列的第四篇: 第一篇:ES1:Windows下安装ElasticSearch 第二篇:ES2:ElasticSearch 集群配置 第三篇:ES3:Ela ...

  8. ES使用C#添加和更新文档

    ElasticSearch 使用C#添加和更新文档 这是ElasticSearch 2.4 版本系列的第四篇: 第一篇:ES1:Windows下安装ElasticSearch 第二篇:ES2:Elas ...

  9. ElasticSearch入门 第四篇:使用C#添加和更新文档

    这是ElasticSearch 2.4 版本系列的第四篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 E ...

随机推荐

  1. 深度学习: 学习率 (learning rate)

    Introduction 学习率 (learning rate),控制 模型的 学习进度 : lr 即 stride (步长) ,即反向传播算法中的 ηη : ωn←ωn−η∂L∂ωnωn←ωn−η∂ ...

  2. 查看QML数据类型

    assist输入: QML Types A Abstract3DSeries AbstractActionInput AbstractAnimation AbstractAxis AbstractAx ...

  3. zabbix4.4 (server,proxy,agent)安装部署实战

    一. 部署架构图 二. 安装环境及版本信息 操作系统:centos7 zabbix版本: 4.4 mysql: 5.7.28 三.zabbix server安装(192.168.182.132) rp ...

  4. 简介Python设计模式中的代理模式与模板方法模式编程

    简介Python设计模式中的代理模式与模板方法模式编程 这篇文章主要介绍了Python设计模式中的代理模式与模板方法模式编程,文中举了两个简单的代码片段来说明,需要的朋友可以参考下 代理模式 Prox ...

  5. LeetCode_119. Pascal's Triangle II

    119. Pascal's Triangle II Easy Given a non-negative index k where k ≤ 33, return the kth index row o ...

  6. python调用shell命令

    1.subprocess介绍 官方推荐 subprocess模块,os.system(command) 这个废弃了 亲测 os.system 使用sed需要进行字符转义,非常麻烦 python3 su ...

  7. jsPlumb 基本概念

    jsPlumb 基本概念 一.默认属性 Anchor:锚点(连接点位置),可以设置在任何没有锚点的目标上(endPoint) Anchors:设置在connect的源和目标点的连接点位置,默认是 Bo ...

  8. 《Django企业开发实战 高效Python Web框架指南》胡阳

    链接:https://pan.baidu.com/s/1NmN_IT5RvevCMt9bZCW1-g提取码:2ki9

  9. python 全栈开发之旅

    目录 python 基础语法 python 数据类型(未完成) python 内置函数(未完成) python 常用标准库(未完成) python 类(未完成) python 进程.线程.协程(未完成 ...

  10. FineReport点击输入框直接展示下拉框列表

    引用自帆软官方文档-http://help.finereport.com/doc-view-1899.html 1. 描述 下拉框以及下拉复选框默认状态,必须点击最右侧的三角才可以实现下拉,不够人性化 ...