`
isiqi
  • 浏览: 16496523 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

lucene中的删除索引

阅读更多
今天在测试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的基本概念。Lucene是一个开源的全文搜索引擎库,由Apache软件基金会开发。它提供了高性能、可扩展的搜索和索引功能,广泛应用于各种应用程序中,如...

    Lucene 删除 合并索引

    Lucene 删除 合并索引,可以指定几个索引文件合并成一个索引文件。自己写的,有很多不足之处请多指教

    lucene.net 2.9.2 实现索引生成,修改,查询,删除实例

    如果需要完全删除索引,可以使用以下代码: ```csharp directory.Delete(); ``` **Demo项目** 压缩包中的"Demo"文件可能包含了完整的示例代码,包括索引生成、修改、查询和删除的完整流程。通过阅读和运行这些...

    基于lucene技术的增量索引

    - **处理删除数据**:删除操作需要在索引中标记文档为删除,而不是物理删除。在Lucene中,我们可以使用`IndexWriter.deleteDocuments(Term)`方法来标记特定的文档为删除状态。 - **提交与刷新**:在处理完所有变更...

    Lucene 索引的简单使用

    - **文档(Document)**:在Lucene中,一个文档代表你要索引的信息单元,它可以包含多个字段(Field)。 - **字段(Field)**:字段是文档的组成部分,每个字段都有特定的类型(如文本、日期等),并可以被索引或...

    lucene 4.7.2 Demo

    本文将深入探讨Lucene 4.7.2的特性,包括创建、删除和修改索引,以及高级搜索功能如通用对象搜索、范围搜索、排序和高亮显示。 首先,让我们了解如何利用Lucene 4.7.2创建索引。创建索引是全文检索的基础,它涉及将...

    Lucene索引器实例

    - 使用`addDocument`方法:通过`IndexWriter`将文档添加到索引中。 **4. 更新和删除文档** - 更新文档:Lucene不支持直接更新已存在的文档,而是通过删除旧文档并重新添加新文档的方式来实现。 - 删除文档:调用`...

    Lucene.NET全文索引搜索Demo项目

    用户输入查询后,系统会解析查询语句,与索引中的条目进行匹配,然后返回最相关的文档。Lucene.NET提供了丰富的查询语法,包括布尔查询、短语查询、模糊查询等,可以满足各种复杂的搜索需求。 该项目可能还涉及到...

    Lucene读取索引文件

    2. **.del文件**:记录了被删除的文档ID,当文档被删除时,并不立即从索引中移除,而是标记为删除,以便在后续合并段时处理。 3. **.tii和.tis文件**:存储了Term信息的索引,用于快速找到对应Term的postings列表。...

    深入了解Lucene之二 索引结构.ppt

    在Lucene中,索引是由一系列文档(document)组成的,每个文档包含多个域(field),每个域又由多个项(term)构成。项是基本的搜索单元,通常是一个字符串。例如,一篇文章的标题、内容、作者等都可以被视为不同的...

    Lucene索引和查询

    - 更新和删除:如果数据发生改变,Lucene提供机制更新索引或删除文档。 - 多线程支持:在大型应用中,可能需要并发创建和查询索引,Lucene支持多线程操作。 - 性能优化:如使用内存映射文件(MMapDirectory)、优化...

    lucene 结合 poi 索引word

    在Document中添加Field后,调用IndexWriter的addDocument方法将其添加到索引中。记得在完成所有添加后,调用commit方法保存索引,确保数据持久化。 在实际应用中,可能还需要考虑一些高级特性,如更新已有索引、...

    Lucene索引的基本操作

    Lucene索引存储在文件系统中,因此需要创建一个目录来保存索引。可以使用`FSDirectory`类来实现: ```java File indexLocation = new File("index"); Directory directory = FSDirectory.open(indexLocation.toPath...

    Lucene 索引、删除、检索 实例

    要删除索引中的文档,首先需要找到对应的Document的唯一标识,通常通过Document中的唯一ID字段。然后,可以使用以下步骤: - **打开IndexReader**: 首先,需要打开一个IndexReader,这允许读取索引而不修改它。例如...

    Lucene.net建立索引,检索分页Demo

    Lucene 提供了强大的文本分析、索引创建、文档检索以及搜索结果排序等功能。在 .NET 平台上,Lucene.net 提供了与原生 Lucene 相同的强大功能,并且完全兼容 .NET Framework 和 .NET Core。 1. **文本分析(Text ...

    Lucene Demo(创建、增加、更新、删除索引等)

    Lucene 是一个强大的全文搜索引擎库,通过创建、增加、更新和删除索引来管理文本数据的检索。理解并熟练运用这些操作是构建高效搜索应用的关键。通过 `LuceneTest` 示例代码,开发者可以深入理解这些概念并应用于...

    Lucene5学习之创建索引入门示例

    **Lucene5学习之创建索引入门示例** 在IT领域,搜索引擎的开发与优化是一项关键技术,而Apache Lucene作为一款高性能、全文本搜索库,是许多开发者进行文本检索的首选工具。本文将深入探讨如何使用Lucene5来创建一...

    Lucene3.0增删改查和关键字高亮实例

    **删除索引**操作可以通过以下方式完成: 1. 获取要删除文档的唯一标识符,通常是`Document`中的`ID`字段。 2. 创建一个`Term`对象,指定字段名和对应的值。 3. 调用`IndexWriter`的`deleteDocuments(Term)`方法执行...

    lucene创建修改删除组合条件查询

    在本主题中,我们将深入探讨如何使用Lucene进行创建、删除、修改和组合条件查询,以及如何实现类似MySQL中的LIKE、IN、OR和时间范围条件查询。 首先,**创建索引**是使用Lucene的第一步。创建索引涉及到读取数据源...

    lucene全文索引

    在给定的`MailDAO.java`文件中,可能包含了一个用于操作邮件数据的DAO(Data Access Object)类,通过这个类,我们可以将邮件内容存储到Lucene索引中,或者从索引中检索相关的邮件信息。使用DAO模式,有助于保持业务...

Global site tag (gtag.js) - Google Analytics