今天在测试lucene的删除索引中遇到一个问题
测试代码如下:
。。。。。。。
protectedvoidsetUp()throwsException...{
super.setUp();
deleteIndexBuilder=(DeleteIndexBuilder)CTX
.getBean("deleteIndexBuilder");
addIndexBuilder=(AddIndexBuilder)CTX.getBean("addIndexBuilder");
addIndexBuilder.getConstant().setCreateAble(true);
addIndexBuilder.buildIndex();
}
。。。。。。。
publicvoidtestDeleteIndex()throwsException...{
//代码段1
IndexReaderreader2=IndexReader.open(deleteIndexBuilder.getConstant()
.getIndexDir());
assertEquals(23,reader2.numDocs());
reader2.close();
//代码段2
deleteIndexBuilder.buildIndex();
//代码段3
IndexReaderreader3=IndexReader.open(deleteIndexBuilder.getConstant()
.getIndexDir());
assertEquals(13,reader3.numDocs());
reader3.close();
}
在测试中,首先重建索引(见setup方法),在测试方法中可以看出
1) 删除前有23个doc(见代码段1)
2) 删除索引(共10个doc,见代码段2)
3) 删除后有13个doc(见代码段3)
第一次执行,没问题,第二次执行就发现代码段1处出现断言错误,说该处此刻只有13个doc
后来发现原来使用IndexReader.deleteDocuments 方法就算调用了IndexReader.close也并不删除doc,这与lucene in action(page 33)中的说法有些出入
Documentdeletionisdoneusingaclassthatissomewhatinappropriately
calledIndexReader.Thisclassdoesn’tdeleteDocumentsfromtheindeximmediately.
Instead,itmarksthemasdeleted,waitingfortheactualDocumentdeletion
untilIndexReader’sclose()methodiscalled.
我想也许是lucene版本不一样的原因.
其实使用lucene删除,lucene会做好删除标记直到你调用IndexWriter.optimize()才真正从库中删除.
出现上面测试所遇到的问题正是因为在重建索引时才真正删除doc,这样的话就与断言的23不符合,测试失败
lucene的这种删除方式似乎也不大会影响你的应用,就算没有从库中删除,你也搜索不到这个
doc了,至于是不是要在删除索引的时候添上IndexWriter.optimize()以及IndexWriter.close()这样的代码视情况而定.
分享到:
相关推荐
Lucene之删除索引 Lucene之删除索引 Lucene之删除索引 http://blog.csdn.net/nupt123456789/article/details/10666105
Lucene 删除 合并索引,可以指定几个索引文件合并成一个索引文件。自己写的,有很多不足之处请多指教
lucene.net 2.9.2 实现索引生成,修改,查询,删除实例
lucene 4.7.2支持java 6 ,之后的版本需要java 7以上,创建、删除、修改索引,搜索支持通用对象(可以根据对象类型搜索),可以范围搜索、排序、高亮,希望有所帮助
完整的Eclipse 工程,举一些小例子,Lucene的建立索引、删除索引、以及检索,希望对喜欢或者用Lucene开发程序的朋友们有所帮助!
Lucene使用的一个Demo,包括索引的创建、增加、更新、删除等
文档中包含Lucene4.0.0版本jar包,中文分词器jar包,Lucene实例代码 1:建立索引 2:各种搜索方式方法 3:删除索引 4:检查索引文件 5:恢复删除的索引 6:强制删除 7:更新索引 8:合并索引 9:高亮回显 供大家参考...
基于lucene5.3.1的项目实例 lucene创建索引,删除索引,更新索引,查找索引。
lucene.net 索引文件图形界面管理器,可以查看分词情况和索引记录,增加删除操作等。
Lucene的基础知识 1、案例分析:什么是全文检索,如何实现全文检索 2、Lucene实现全文检索的流程 a) 创建索引 b) 查询索引 3、配置开发环境 4、创建索引库 5、查询索引库 ...solr在项目中的应用及电商搜索实现
所谓入是写入,即将你提供的源(本质是字符串)写入索引或者将其从索引中删除;所谓出是读出,即向用户提供全文搜索服务,让用户可以通过关键词定位源。 2.1写入流程 源字符串首先经过analyzer处理,包括:分词,...
资源名称:Lucene实战视频教程资源目录:【】01_lucenc简介和创建索引初步【】02_lucene简介和搜索初步【】03_lucene索引_创建_域选项【】04_lucene索引_的删除和更新【】05_lucene索引_加权操作和Luke的简单演示...
lucene4.0创建索引,删除索引,搜索的一些小demo,分享出来供大家学习。
2.5 删除和更新索引 5 (1) 使用writer删除 5 (2) 使用reader删除 5 (3) 恢复删除 5 (4) 彻底删除 6 (5) 更新索引 6 (6) 手动优化 6 2.6 索引文件作用 7 第三章 搜索功能 8 3.1 简单搜索 8 (1) 创建IndexReader 8 (2)...
基于Java的全文索引引擎.doc lucene测试代码.txt lucene为数据库搜索建立增量索引.txt lucene数据库索引.txt 新闻系统全文检索的思绪.txt ... 关于lucene2.0的创建、检索和删除功能的完整实现.doc weblucene.txt
Lucene是一个基于Java的全文索引工具包。 1. 基于Java的全文索引引擎Lucene简介:关于作者和Lucene的...5. Hacking Lucene:简化的查询分析器,删除的实现,定制的排序,应用接口的 扩展 6. 从Lucene我们还可以学到什么
这样你就告诉 lucene 我要在 c 盘的 index 目录下建立索引文件,我要使用车东老师的二分词算法做分析器、我要在这个目录下删除以前的索引或任何文件创立我的索引文件。 索引的建立有三种方式,让我一一道来: 1 ...
对索引进行读取和删除操作的IndexReader类。 3) store模块:负责索引的存储。提供索引的各种存储类:FSDirectory,RAMDirectory等。 4) document模块:索引文件内部的基础存储结构封装。如:Document类和Field类等...
lucene.net实现全文检索,有网上难以找到的增量索引、更新索引、删除索引实例,五万多条数据,建立索引、查询数据瞬间完成,速度之快难以想象。
介绍了Lucene建立索引的过程,索引的查看和删除,索引的同步,索引的合并和优化等内容。第4部分:搜索的高级知识。介绍使用不同的Query对象构建搜索请求,使用QueryParser解析用户的搜索请求,搜索结果的过滤和排序...