`

Lucene的事务性

阅读更多

原文:http://www.cnblogs.com/forfuture1978/archive/2010/06/07/1752917.htmlLucene的事务性

所谓事务性,本多指数据库的属性,包括ACID四个基本要素:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。

我们这里主要讨论隔离性,Lucene的IndexReader和IndexWriter具有隔离性。

  • 当IndexReader.open打开一个索引的时候,相对于给当前索引进行了一次snapshot,此后的任何修改都不会被看到。
  • 仅当IndexReader.open打开一个索引后,才有可能看到从上次打开后对索引的修改。
  • 当IndexWriter没有调用Commit的时候,其修改的内容是不能够被看到的,哪怕IndexReader被重新打开。
  • 欲使最新的修改被看到,一方面IndexWriter需要commit,一方面IndexReader重新打开。

下面我们举几个例子来说明上述隔离性:

 

(1) 首先做准备,索引十篇文档

File indexDir = new File("TestIsolation/index");

IndexWriter writer = new IndexWriter(FSDirectory.open(indexDir), new StandardAnalyzer(Version.LUCENE_CURRENT), true, IndexWriter.MaxFieldLength.LIMITED);

for(int i =0; i < 10; i++){

  indexDocs(writer);

}

writer.close();

(2) 然后再索引十篇文档,并不commit

writer = new IndexWriter(FSDirectory.open(indexDir), new StandardAnalyzer(Version.LUCENE_CURRENT), IndexWriter.MaxFieldLength.LIMITED);

for(int i =0; i < 10; i++){

  indexDocs(writer);

}

(3) 打开一个IndexReader,但是由于IndexWriter没有commit,所以仍然仅看到十篇文档。

IndexReader reader = IndexReader.open(FSDirectory.open(indexDir));

IndexSearcher searcher = new IndexSearcher(reader);

TopDocs docs = searcher.search(new TermQuery(new Term("contents","hello")), 50);

System.out.println(docs.totalHits);

(4) IndexWriter进行提交commit

writer.commit();

(5) 不重新打开IndexReader,进行搜索,仍然仅看到十篇文档。

docs = searcher.search(new TermQuery(new Term("contents","hello")), 50);

System.out.println(docs.totalHits);

(6) IndexReader重新打开,则可以看到二十篇文档。

reader = IndexReader.open(FSDirectory.open(indexDir));

searcher = new IndexSearcher(reader);

docs = searcher.search(new TermQuery(new Term("contents","hello")), 50);

System.out.println(docs.totalHits);

分享到:
评论

相关推荐

    Lucene与关系型数据库对比

    相比之下,关系型数据库在过去的二十余年里,因其操作便捷、易于维护、便于访问和安全性强的特点,在事务处理领域占据了主导地位。它们最初是为了满足诸如库存控制、工资计算、账目处理等传统应用场景而设计的。然而...

    lucene原理与代码分析完整版

    #### 九、Lucene的事务性和实时索引构建 Lucene虽然主要用于离线索引构建,但也支持一定程度上的事务性操作和实时索引更新。这对于需要频繁更新索引的应用场景非常重要。 #### 十、其他相关问题 除了以上核心知识...

    Lucene+compass学习资料

    在当今的互联网开发中,数据检索和实时交互性已经成为不可或缺的功能。Lucene作为一个强大的全文搜索引擎库,为开发者提供了高效的文本搜索能力;Compass作为Lucene的一个高级封装,简化了在应用程序中集成搜索引擎...

    Lucene+3.0+原理与代码分析完整版

    6. **Lucene 的事务性**:Lucene 不直接支持事务,但在设计上支持高并发环境下的安全操作,可以通过外部机制实现事务性的需求。 7. **构建实时索引**:Lucene 支持实时更新索引,允许在不重启服务的情况下增加、...

    SQLServer+Lucene.Net例子

    它支持事务处理、数据仓库、数据分析等多种业务场景,提供强大的性能和稳定性。然而,SQL Server在全文搜索方面虽然内置了一些功能,但在复杂查询和高效率的全文检索方面,可能无法满足所有需求。 这就是Lucene.NET...

    ssh集成Lucene4.7demo

    Spring框架则是一个全面的企业级应用开发框架,它包括了依赖注入、面向切面编程、事务管理等功能,可以有效简化应用的复杂性。Hibernate则是一个持久层框架,负责对象关系映射(ORM),使得开发者可以使用Java对象来...

    全文检索Lucene 全文检索Lucene

    - **Compass**:基于Lucene的高级搜索框架,提供了一种更简便的方式来集成Lucene到应用程序中,支持事务、缓存和实时检索等功能。 - **GazelleQuery**:Compass扩展了Lucene的查询机制,提供了更丰富的查询语法和...

    springmvc+mybatis+lucene4文档搜索系统(支持分页)

    - **MyBatis SqlSession**:执行SQL查询的入口,管理数据库事务。 - **Lucene Analyzer**:分析器,将用户输入的关键词拆分成可以索引的 tokens。 - **IndexWriter**:构建和更新索引的主要类。 - **QueryParser**:...

    conquiris-lucene-3.5.0.zip

    Spring 3是一个较旧的版本,但仍然广泛使用,因为它具有良好的兼容性和稳定性。 3. **Spring Archetypes**:Spring Archetypes是Maven的一个概念,它提供了预定义的项目结构和配置,使得开发者可以快速启动一个新的...

    Lucene与SSH2搜索功能

    **Spring框架** 在这里主要扮演服务层的角色,它是一个全面的后端解决方案,提供了依赖注入、事务管理、AOP(面向切面编程)等功能。在搜索功能的实现中,Spring可以帮助管理Lucene的相关组件,如索引目录、搜索引擎...

    lucene3_ssh.rar_lucene

    SSH框架是Java Web开发中的常见选择,Spring提供了依赖注入和事务管理,Struts处理MVC模式,而Hibernate则负责对象关系映射。整合Lucene到SSH框架中,可以为Web应用带来强大的搜索能力。 接下来,我们将逐步讲解SSH...

    基于Lucene的全文检索引擎研究与应用

    - **高效性**:Lucene能够快速地构建和访问索引,从而实现高效的文档检索。 - **跨平台**:由于基于Java语言开发,因此Lucene能够在不同的操作系统平台上运行,提高了其适用范围。 - **灵活性**:Lucene允许用户...

    struts2.3 spring3.2 mybatis3.2 lucene4.2搜索引擎

    Struts2提供了丰富的特性,如拦截器、结果类型、动态方法调用等,帮助开发者创建结构清晰、可维护性强的Web应用。在搜索引擎项目中,Struts2可以用于处理用户请求,管理页面流程,并与后端服务进行交互。 **Spring...

    struts2+ibitas+spring+lucene 整合

    iBatis与Spring结合,可以实现事务管理和DAO(Data Access Object)的管理,提高了代码的可维护性和可测试性。 Spring 框架是Java企业级应用的核心框架,它提供了一个全面的基础设施,支持创建和管理Bean、AOP...

    Compass+ lucene 通用代码(脱离数据库)

    总的来说,通过使用Compass+Lucene,开发者可以快速搭建一个高性能的全文搜索引擎,无需依赖数据库的全文索引功能,从而提高查询效率并降低系统复杂性。同时,源码级别的定制能力使得这套解决方案具有很高的可扩展性...

    lucene 全文检索数据库

    与简单的关键字匹配不同,全文检索能够理解语言结构,如词干分析、同义词识别等,从而提高搜索结果的相关性和准确性。Lucene通过建立倒排索引来实现全文检索,这种方法将文档中的词汇映射到包含该词汇的文档列表,...

    一种基于Lucene检索引擎的全文数据库的研究与实现

    ### 一种基于Lucene检索引擎的全文数据库的研究与实现 #### 1. 引言 ...综上所述,基于Lucene的全文数据库提供了一种高效、灵活且易于实施的解决方案,对于提高信息检索的准确性和效率具有重要意义。

    实时搜索引擎源码LUCENE

    LUCENE通过版本控制和事务日志来确保在多节点间的更新一致性。当新文档被添加或更新时,它们首先被写入事务日志,然后在后台进行索引,这样即使在节点故障期间,也能保证不丢失数据。 7. **性能调优** 要充分利用...

    java大数据内容_7Flume、Kafka、Sqoop、Lucene

    ### Java大数据内容_7Flume、Kafka、Sqoop、Lucene #### 一、Flume 入门 ##### 1.1 Flume 概述 Flume 是一个分布式的、可靠的、高可用的日志采集系统,主要用于收集、汇总和移动大量的日志数据。它由 Cloudera ...

    SSM框架构建积分系统和基本商品检索系统(Spring+SpringMVC+MyBatis+Lucene+Redis+MAVEN)

    在积分系统中,Spring可以用来管理数据库连接池、事务控制、服务层对象等,确保系统的稳定性和可维护性。 2. **SpringMVC**:这是Spring框架的一个模块,用于处理Web请求。它采用模型-视图-控制器(MVC)架构模式,...

Global site tag (gtag.js) - Google Analytics