一、代码分析

/**
* 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. 在 Linux 中查找和删除重复文件

    原文链接:https://www.linuxprobe.com/linux-FSlint.html FSlint同时具有GUI和CLI模式.因此,对于新手来说,这是一个用户友好的工具.FSlint不仅 ...

  2. 内存不够用还要速度快,终于找到可以基于 File 的 Cache 了

    一:背景 1. 讲故事 18年的时候在做纯内存项目的过程中遇到了这么一个问题,因为一些核心数据都是飘在内存中,所以内存空间对我们来说额外宝贵,但偏偏项目中有些数据需要缓存,比如说需要下钻的报表上的点, ...

  3. CentOS 6.x/7.x上安装git

    yum安装 # yum info git # yum install -y git 可以通过下面的命令来检查是否安装了git环境 git --version 参考:如何在CentOS 6.x/7.x上 ...

  4. ms-data(转载)

    转载:https://www.cnblogs.com/zll-52011/p/10960905.html 1.从美国矿物数据库下载矿物CIF(有晶格) 2.晶胞CIF导入MS 3.选择display ...

  5. 2020重新出发,MySql基础,MySql视图&索引&存储过程&触发器

    @ 目录 视图是什么 视图的优点 1) 定制用户数据,聚焦特定的数据 2) 简化数据操作 3) 提高数据的安全性 4) 共享所需数据 5) 更改数据格式 6) 重用 SQL 语句 MySQL创建视图 ...

  6. 漏洞重温之sql注入(五)

    漏洞重温之sql注入(五) sqli-labs通关之旅 填坑来了! Less-17 首先,17关,我们先查看一下页面,发现网页正中间是一个登录框. 显然,该关卡的注入应该为post型. 直接查看源码. ...

  7. 【Azure DevOps系列】Azure DevOps生成代码覆盖率

    前言 在做单元测试时,代码覆盖率可以作为我们衡量代码质量的一个指标,本章我们将使用Azure DevOps帮助我们生成代码覆盖率的结果.Azure DevOps构建管道还是具有代码覆盖率选项的,在Vi ...

  8. const定义的对象属性是否可以改变------是!

    用const声明person对象,给age重新赋值是没问题的 但是重新给person赋值是不可以的 这里需要了解'基本数据类型'和'引用数据类型' 基本数据类型:string, number, boo ...

  9. Unity NGUI C#性能优化

    建议读者先看这篇博文:http://blog.csdn.net/zzxiang1985/article/details/43339273,有些技术已经变了,比如第1招,unity5的打包机制已经变许多 ...

  10. spring中bean初始化执行顺序

    常用的javabean的初始化方法为,构造方法,@PostConstruct,以及实现InitializingBean接口的afterPropertiesSet方法. note在构造方法执行时候,sp ...