Lucene知识小总结4:索引的反删除
2019独角兽企业重金招聘Python工程师标准>>>
IndexReader提供了一个有时非常有用的方法undeleteAll,该方法能反向操作索引中所有被挂起的删除。需要注意的是,该方法只能对还未进行段合并的文档进反删除操作。该方法之所以能够实现反删除操作,是因为IndexWriter只能将删除文档标志为删除状态,但事实上并未真正移除这些文档,最终的删除操作是在该文档所对应的段进行合并时才执行的。(以上文字摘自《Lucene 实战》)
一、下面代码使用reader进行删除
public void delete02() {try {reader = IndexReader.open(directory,false);reader.deleteDocuments(new Term("id","1"));System.out.println("numDocs:"+reader.numDocs());System.out.println("maxDocs:"+reader.maxDoc());System.out.println("deleteDocs:"+reader.numDeletedDocs());System.out.println("=============");reader.undeleteAll();System.out.println("numDocs:"+reader.numDocs());System.out.println("maxDocs:"+reader.maxDoc());System.out.println("deleteDocs:"+reader.numDeletedDocs());reader.close();} catch (CorruptIndexException e) {e.printStackTrace();} catch (LockObtainFailedException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}
执行结果截图
二、下面代码使用writer进行删除
public void delete() {IndexWriter writer = null;try {reader = IndexReader.open(directory,false); writer = new IndexWriter(directory,new IndexWriterConfig(Version.LUCENE_35,new StandardAnalyzer(Version.LUCENE_35)));//参数是一个选项,可以是一个Query,也可以是一个term,term是一个精确查找的值//此时删除的文档并不会被完全删除,而是存储在一个回收站中的,可以恢复//writer.deleteDocuments(new Term("id","1"));writer.deleteDocuments(new Term("id","1"));writer.commit();System.out.println("numDocs:"+reader.numDocs());System.out.println("maxDocs:"+reader.maxDoc());System.out.println("deleteDocs:"+reader.numDeletedDocs());reader.close();reader = IndexReader.open(directory,false);System.out.println("=============");System.out.println("numDocs:"+reader.numDocs());System.out.println("maxDocs:"+reader.maxDoc());System.out.println("deleteDocs:"+reader.numDeletedDocs());System.out.println("=============");//writer.close();reader.undeleteAll();System.out.println("numDocs:"+reader.numDocs());System.out.println("maxDocs:"+reader.maxDoc());System.out.println("deleteDocs:"+reader.numDeletedDocs());reader.close();} catch (CorruptIndexException e) {e.printStackTrace();} catch (LockObtainFailedException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {try {if(writer!=null) writer.close();} catch (CorruptIndexException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}
运行报错
把”writer.close();“的注释去掉再运行
查阅资料,可以作为借鉴的解析:
如果你试图通过IndexReader删除文档,需要记住:Lucene只允许一个writer打开一次。实施删除操作的IndexReader此时只能算作一个writer。这意味着在使用IndexReader进行删除操作之前必须关闭已打开的任何IndexWriter,反之亦然。
转载于:https://my.oschina.net/heroShane/blog/202348
Lucene知识小总结4:索引的反删除相关推荐
- 阿里深资架构师整理的Java 基础知识小抄 赶紧收藏
本篇算是 Java 的基础知识小抄吧,之所以说小抄是因为觉得涵盖不是很细很全,但是基本的内容都有,当然后头还会继续完善,只是不会再用笔记录了!按照现在的习惯,先附上一张思维导图: 1. 安装与环境配置 ...
- 【知识小课堂】 mongodb 之 objectId
一.OBJECTID 因公司开发人员在使用MONGODB时,总遇到一些小问题.为了增加大家的mongodb 数据库知识. 决定每周进行一.两次的知识小课堂.这里把内容整理出来,上传到博客中.也算是自己 ...
- Java多线程知识小抄集(二)
欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...
- 金融知识小科普 - 宽基指数
--------------------------------------- 本文仅作为知识科普,无任何投资倾向,投资有风险,投资需谨慎. ----------------------------- ...
- 金融知识小科普 - 央行逆回购
------------------------------------------------------------------------------ 本文仅作为知识科普,无任何投资倾向,投资有 ...
- 金融知识小科普 - 北向资金
--------------------------------------- 本文仅作为知识科普,无任何投资倾向,投资有风险,投资需谨慎. ----------------------------- ...
- 2019年全国安全生产活动主题防风险、除隐患、遏事故宣传教育片 安全月活动主题挂图视频、挂图、宣传单、折页、安全知识小手册、展板等
2019年安全月活动宣传教育资料 征订单 今年6月是全国第18个"安全生产月",国务院安委会办公室将以危险化学品安全为重点,以"防风险.除隐患.遏事故"为主题, ...
- 《火灾防控应急科普知识小手册》2020年119消防安全宣传活动日警示教育片等资料
这里写自定义目录标题 2020年全国"安全生产月"活动宣传教育音像教材 "联系人:柳月敏:13520568871(微信同步) 辛松松:13811420807(微信同步) ...
- 金融知识小科普 - 债券基金
--------------------------------------- 本文仅作为知识科普,无任何投资倾向,投资有风险,投资需谨慎. ----------------------------- ...
最新文章
- Android实现买卖商品小游戏
- 劳力士格林尼治价格_劳力士行情暴跌后回涨,什么时候才是入手的最佳时机?...
- ASA 独立实现WEB URL过滤!!!
- python 比较运算符放在列表中_在Python3中将运算符放在列表中
- 工商银行黄金开户问答题答案
- react领域里面jsx中的style的值为什么放到了{}中
- yii2解决资源插件路径不对应问题
- sqlserver备份后无法还原的解决方法
- 力扣-48 旋转图像
- Python 中的容器
- 【极限精简888M,老机专用】星岚技术 Win7 x64 深度精简版 V2020.10
- 赠书 | 程序员学数学和算法基础畅销书单
- 【软件工程】-可行性研究报告
- usage.txt-2
- 自由传奇|为你的队伍加油!
- [附源码]java毕业设计归元种子销售管理系统
- Qt-qmake install相关
- LaTex\TexStudio 数学矩阵
- JavaWeb(后端)
- 【U8+】卸载远程通后,U8提示错误无法加载DLL“UFPAClient.dll”找不到指定的模块。