一、代码分析

/**
* Lucene入门
* 操作索引
*/
public class ManageIndex { public IndexWriter getIndexWriter() throws Exception {
//设置索引库的位置
Directory directory = FSDirectory.open(new File("E:\\zhanghaoBF\\luceneSolr\\indexLibrary").toPath());
Analyzer analyzer = new StandardAnalyzer();//创建分词器对象(官方推荐标准分词器)
IndexWriterConfig indexWriterConfig = new IndexWriterConfig(analyzer);//设置使用的分词器
return new IndexWriter(directory, indexWriterConfig);//索引对象
} /**
* 全删除(PS:索引里面的文档也会删掉)
*
* @throws Exception
*/
@Test
public void deleteAllIndex() throws Exception {
IndexWriter indexWriter = getIndexWriter();//获取索引的流对象
indexWriter.deleteAll();//删除全部索引
indexWriter.close();//关流
} /**
* 按条件删除(PS:索引里面的文档也会删掉)
*
* @throws Exception
*/
@Test
public void deleteIndex() throws Exception {
IndexWriter indexWriter = getIndexWriter();//获取索引的流对象
Query query = new TermQuery(new Term("fileContent", "lucene"));//PS:TermQuery为精准匹配
indexWriter.deleteDocuments(query);//按条件删除索引
indexWriter.close();//关流
} /**
* 修改(PS:先删除后新增,与数据库里面的修改不一样,注意区分)
*
* @throws Exception
*/
@Test
public void updateIndex() throws Exception {
//获取索引的流对象
IndexWriter indexWriter = getIndexWriter(); //构建一个文档对象
Document doc = new Document();
doc.add(new TextField("fileName", "新的文件名称", Field.Store.YES));
doc.add(new TextField("fileContent", "新的文件内容", Field.Store.YES)); //调用更新操作,先把符合条件的索引删掉(包括term和存在索引库的文档),然后把刚才新增的文档对象加入到索引库中
indexWriter.updateDocument(new Term("fileName", "是"), doc);//按条件删除索引,再加入新的索引
//PS:删掉的文档还是会占用对应的文档ID,新增的文档排在最后(和数据库ID自增时的删除再添加一个道理) //关流
indexWriter.close();
}
}

二、注意事项

1、删除的时候,索引库里对应ID下的term和文档都会删除

2、修改操作其实是先把符合条件的term和文档都会删掉,然后再加入新的文档。

3、删掉的文档,文档ID不会释放,还是被占用的。

4、流用完一定要记得关。

搜索引擎学习(五)Lucene操作索引的更多相关文章

  1. Lucene4.9学习笔记——Lucene建立索引

    基本上创建索引需要三个步骤: 1.创建索引库IndexWriter对象 2.根据文件创建文档Document 3.向索引库中写入文档内容 这其中主要涉及到了IndexWriter(索引的核心组件,用于 ...

  2. jquery 学习(五) - CSS 操作

    HTML + CSS 样式 /*CSS样式*/<style> body{ margin: 0; } div{ width: 100%; height: 2000px; background ...

  3. Lucene.net(4.8.0) 学习问题记录六:Lucene 的索引系统和搜索过程分析

    前言:目前自己在做使用Lucene.net和PanGu分词实现全文检索的工作,不过自己是把别人做好的项目进行迁移.因为项目整体要迁移到ASP.NET Core 2.0版本,而Lucene使用的版本是3 ...

  4. Lucene学习总结之三:Lucene的索引文件格式(1)

    Lucene的索引里面存了些什么,如何存放的,也即Lucene的索引文件格式,是读懂Lucene源代码的一把钥匙. 当我们真正进入到Lucene源代码之中的时候,我们会发现: Lucene的索引过程, ...

  5. Lucene学习总结之三:Lucene的索引文件格式(1) 2014-06-25 14:15 1124人阅读 评论(0) 收藏

    Lucene的索引里面存了些什么,如何存放的,也即Lucene的索引文件格式,是读懂Lucene源代码的一把钥匙. 当我们真正进入到Lucene源代码之中的时候,我们会发现: Lucene的索引过程, ...

  6. Lucene.net(4.8.0) 学习问题记录三: 索引的创建 IndexWriter 和索引速度的优化

    前言:目前自己在做使用Lucene.net和PanGu分词实现全文检索的工作,不过自己是把别人做好的项目进行迁移.因为项目整体要迁移到ASP.NET Core 2.0版本,而Lucene使用的版本是3 ...

  7. python3.4学习笔记(十五) 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)

    python3.4学习笔记(十五) 字符串操作(string替换.删除.截取.复制.连接.比较.查找.包含.大小写转换.分割等) python print 不换行(在后面加上,end=''),prin ...

  8. 第五步:Lucene创建索引

    package cn.lucene; import java.io.IOException; import java.nio.file.Paths; import java.util.Date; im ...

  9. lucene学习笔记:三,Lucene的索引文件格式

    Lucene的索引里面存了些什么,如何存放的,也即Lucene的索引文件格式,是读懂Lucene源代码的一把钥匙. 当我们真正进入到Lucene源代码之中的时候,我们会发现: Lucene的索引过程, ...

随机推荐

  1. 获取元素top值,屏幕滚动到当前元素

    var top = $(this).offset().top; $('html , body').animate({scrollTop: top-100},10);

  2. 计算机网络-网络层(3)DHCP协议

    主机获得IP地址,除了可以通过静态配置,还可以通过动态主机配置协议DHCP: Dynamic Host Configuration Protocol从服务器动态获取IP地址.子网掩码.默认网关地址.D ...

  3. 操作系统-存储管理(3)高速缓存Cache

    存储器的组织形式: 数据总是在相邻两层之间复制传送,最小传送单位是定长块,互为副本(不删除) ️指令和数据有时间局部性和空间局部性.   高速缓冲存储器Cache 介于CPU和主存储器间的高速小容量存 ...

  4. SpringBoot集成Swagger2,3分钟轻松入手!

    一.引入maven <dependency> <groupId>io.springfox</groupId> <artifactId>springfox ...

  5. Java 8新特性(二):Stream API

    本篇文章继续介绍Java 8的另一个新特性--Stream API.新增的Stream API与InputStream和OutputStream是完全不同的概念,Stream API是对Java中集合 ...

  6. Four Fundamental Operations(JS) --结对项目

    一.Github地址:https://github.com/BayardM/Four-Fundamental-Operations (本项目由鲍鱼铭3118004995 和 许铭楷3118005023 ...

  7. 6. 二十不惑,ObjectMapper使用也不再迷惑

    一滴水,用显微镜看,也是一个大世界.本文已被 https://www.yourbatman.cn 收录,里面一并有Spring技术栈.MyBatis.JVM.中间件等小而美的专栏供以免费学习.关注公众 ...

  8. Java数据结构——循环链表

    一.单向循环链表表中的最后一个节点的指针域指向头结点,整个链表形成一个环.其他的与单链表相同. (以下图片均来自网络,侵删) 插入操作 删除操作 简单实现 public class CiNode { ...

  9. idea 执行maven打包命令时,修改war包名称

  10. 【Pod Terminating原因追踪系列之一】containerd中被漏掉的runc错误信息

    前一段时间发现有一些containerd集群出现了Pod卡在Terminating的问题,经过一系列的排查发现是containerd对底层异常处理的问题.最后虽然通过一个短小的PR修复了这个bug,但 ...