搜索引擎学习(五)Lucene操作索引
一、代码分析
/**
* 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操作索引的更多相关文章
- Lucene4.9学习笔记——Lucene建立索引
基本上创建索引需要三个步骤: 1.创建索引库IndexWriter对象 2.根据文件创建文档Document 3.向索引库中写入文档内容 这其中主要涉及到了IndexWriter(索引的核心组件,用于 ...
- jquery 学习(五) - CSS 操作
HTML + CSS 样式 /*CSS样式*/<style> body{ margin: 0; } div{ width: 100%; height: 2000px; background ...
- Lucene.net(4.8.0) 学习问题记录六:Lucene 的索引系统和搜索过程分析
前言:目前自己在做使用Lucene.net和PanGu分词实现全文检索的工作,不过自己是把别人做好的项目进行迁移.因为项目整体要迁移到ASP.NET Core 2.0版本,而Lucene使用的版本是3 ...
- Lucene学习总结之三:Lucene的索引文件格式(1)
Lucene的索引里面存了些什么,如何存放的,也即Lucene的索引文件格式,是读懂Lucene源代码的一把钥匙. 当我们真正进入到Lucene源代码之中的时候,我们会发现: Lucene的索引过程, ...
- Lucene学习总结之三:Lucene的索引文件格式(1) 2014-06-25 14:15 1124人阅读 评论(0) 收藏
Lucene的索引里面存了些什么,如何存放的,也即Lucene的索引文件格式,是读懂Lucene源代码的一把钥匙. 当我们真正进入到Lucene源代码之中的时候,我们会发现: Lucene的索引过程, ...
- Lucene.net(4.8.0) 学习问题记录三: 索引的创建 IndexWriter 和索引速度的优化
前言:目前自己在做使用Lucene.net和PanGu分词实现全文检索的工作,不过自己是把别人做好的项目进行迁移.因为项目整体要迁移到ASP.NET Core 2.0版本,而Lucene使用的版本是3 ...
- python3.4学习笔记(十五) 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
python3.4学习笔记(十五) 字符串操作(string替换.删除.截取.复制.连接.比较.查找.包含.大小写转换.分割等) python print 不换行(在后面加上,end=''),prin ...
- 第五步:Lucene创建索引
package cn.lucene; import java.io.IOException; import java.nio.file.Paths; import java.util.Date; im ...
- lucene学习笔记:三,Lucene的索引文件格式
Lucene的索引里面存了些什么,如何存放的,也即Lucene的索引文件格式,是读懂Lucene源代码的一把钥匙. 当我们真正进入到Lucene源代码之中的时候,我们会发现: Lucene的索引过程, ...
随机推荐
- Goland远程连接Linux开发调试
参考链接: https://blog.csdn.net/huwh_/article/details/77879152?utm_source=blogxgwz3 https://baijiahao.ba ...
- nova 数据库中删除虚机
Database changed MariaDB [nova]> SET FOREIGN_KEY_CHECKS=; Query OK, rows affected (0.000 sec) Mar ...
- 分块练习C. interval
分块练习C. interval 题目描述 \(N\)个数\(a_i\),\(m\)个操作 \(1\). 从第一个数开始,每隔\(k_i\)个的位置上的数增加\(x_i\) \(2\). 查询\(l\) ...
- SpringBoot使用简单缓存
第一步开启缓存(只要是springboot项目就可以) 数据库连接等相关配置请读者自行实现. 在Application启动类上添加注解 @EnableCaching 开启缓存 @SpringBoot ...
- 2020,最新Model的设计-APP重构之路
很多的app使用MVC设计模式来将“用户交互”与“数据和逻辑”分开,而model其中一个重要作用就是持久化.下文中设计的Model可能不是一个完美的,扩展性强的model范例,但在我需要重构的app中 ...
- Nodejs模块:fs
/** * @description fs模块常用api */ // fs所有的文件操作都是异步IO,如果要以同步的方式去调用,都会加一个在原同步api的基础上加Sync // 同步的方式会在最后传入 ...
- 5000字 | 24张图带你彻底理解Java中的21种锁
本篇主要内容如下: 本篇文章已收纳到我的Java在线文档. Github 我的SpringCloud实战项目持续更新中 帮你总结好的锁: 序号 锁名称 应用 1 乐观锁 CAS 2 悲观锁 synch ...
- Vue.js学习(八)—— 树形结构下拉框组件vue-treeselect
vue-treeselect是一个多选组件,具有对Vue.js的嵌套选项支持. 具有嵌套选项支持的单个和多个选择 模糊匹配 异步搜索 延迟加载(仅在需要时加载深层选项的数据) 键盘支持(使用Arrow ...
- shader变体
unity shader 变种(多重编译 multi_compile) https://www.jianshu.com/p/f34d896dde5d Unity Shader - Making mul ...
- vue 组件内的守卫
1.beforeRouteEnter () // 进入该组件之前要去进行的逻辑操作, 2.beforeRouteLeave() // 离开该组件之前要去进行的逻辑操作(可清除定时器等耗用内存的变量, ...