一、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. unless it is in a subquery contained in a HAVING clause or a select list.

    sql查询报错: An aggregate may not appear in the WHERE clause unless it is in asubquery contained in a HA ...

  2. Vue 相关开源项目库汇总

    element ★9395 - 饿了么出品的Vue2的web UI工具套件 Vux ★6835 - 基于Vue和WeUI的组件库 vueAdmin ★569 - 基于vuejs2和element的简单 ...

  3. SVG动画示例

    package com.loaderman.customviewdemo; import android.graphics.drawable.Animatable; import android.os ...

  4. 浅析angular,react,vue.js jQuery-1

    作者:尚春链接:https://www.zhihu.com/question/38989845/answer/79201080来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出 ...

  5. C# 可扩展编程MEF学习

    http://www.cnblogs.com/yunfeifei/p/3991330.html

  6. js文件中如何使用 获取EL表达式的值

    转: js文件中如何使用 获取EL表达式的值 原先做法是在jsp页面引入头文件 <%@ page language="java" pageEncoding="UTF ...

  7. 123457123456---com.threeObj3.BabyShizi02--- 宝宝识字02

    com.threeObj3.BabyShizi02--- 宝宝识字02

  8. PAT 甲级 1037 Magic Coupon (25 分) (较简单,贪心)

    1037 Magic Coupon (25 分)   The magic shop in Mars is offering some magic coupons. Each coupon has an ...

  9. mysql逻辑备份mydumper

      mydumper是一个针对MySQL的高性能多线程备份和恢复工具,它提供了并发备份功能,备份效率有很大提高. 安装mydumper yum安装 # rpm -ivh https://github. ...

  10. shell脚本批量执行命令----必需判断上一步执行结果--没有捷径

    # 注意:shell脚本批量执行命令,不能只写一个函数,然后把所有命令复制进去,之前试过这样是不行的.必须要有一个判断命令执行成功与否的语句 # 简单的命令可以不加结果判断符号,但是遇到解压包.sed ...