IndexWriter提交时做的事情:
1.Flush 任何 buffered docs和删除
2.同步所有的新进创建的文件,包括新flushed文件,和merge产生的文件(自最后一次commit调用后的或IndexWriter打开前的 IndexWriter调用 Directory.sync来实现这个,而这个操作会存储到真的IO。这个通常是一个耗时的操作。
3.写和同步下一个segments_N文件。一旦完成,IndexReaders将突然看见上次看到的提交。
4.删除老的commits(调用IndexDeletionPolicy来实现),你可以创建你的自己的实现。
IndexDeletionPolicy
默认值为KeepOnlyLastCommitDeletionPolicy,无论新的commit是否完成 它删掉所有的commits。大多情况就用这个默认值。但对于一些高级的应用,你会保留一个老的 point-in-time的snapshot,即使是更多的改变提交到index中,你可以实现自己的policy。
例如,当在NFS上共享index时,它可能很有必要定制删除策略-直到所有的reader使用index(这index已切到最近的提交)再删除commits。
另一个例子是一个零售公司想保存最近N个版本的catalog。注意无论何时你的选择的策略,保存一个commit,它会消耗必要的index磁盘。如果你keep多commits在index里,有一些现成的API可以帮你。
管理多commits
一般的,一个Lucene的index将只有一个commit,即最后一个commit。但通过实现了一个定制的删除策略,你可以容易的在index聚集多个commits。你可以使用静态的IndexReader.listCommits()方法列出当前所有的commits。然后你可以一个个的处理这些commits。例如,如果你之前调用过IndexWriter.commit(String commitUserData),那么该字符串对于每个commits都可以访问了(即通过调getUserData()方法)。这个字符串可能存储一些对你的应用有用的东西,使你获取你感兴趣的特殊的commit)
一旦你找到一个commit,你可以打开一个IndexReader:一些静态方法能接收IndexCommit参数。你可以使用这些以显示的搜索以前一个版本的索引。
使用同样的逻辑, 你可以基于前一个commit打开一个IndexWriter,但这种使用情况有很大的不同:这个允许你rollback到前一个commit,并且能基于那一点开始索引新文档,且能有效的撤销基于那个commit点后的所有索引的更改。这个同IndexWriter的rollback方法相似,除了这种方法:只回退当前IndexWriter 会话中的变更完成;同时打开一个之前的commit以使你回到很久之前的一个提交。
TWO PHASED COMMIT
For applications that need to commit a transaction involving a Lucene index and other external resources, for example a database, Lucene exposes the prepareCommit() and prepareCommit(String commitUserData) methods. Each method does steps 1 and 2 above, as well as most of step 3, but it stops short of making the new segments_N file visible to a reader. After prepareCommit() is called, you should then either call rollback(), to abort the commit, or commit(). Commit() is a very fast call if prepareCommit() was already called. If an error will be hit, for example disk full, most likely prepareCommit() will hit the error, not commit(). The separation of these two steps of committing allows you to build a distributed two-phase commit protocol involving Lucene.
两阶段提交
对于那些需要提交事务(该事务涉及lucene索引和其他外部资源)的应用,如数据库,lucene expose prepareCommit() 和 prepareCommit(String commitUserData) 方法。每个方法做上面提到的1和2,3也会做到,但它停一小会,直到新的segments_N文件对一个reader可见。prepareCommit()调用完后,你应该要么调用rollback,要么放弃commit,要么-commit。commit是一个很快的调用,如果 prepareCommit()已完成调用。如果一个错误出现,如磁盘满了,那么是prepareCommit会碰到错误,而不是commit。这两个提交步骤的分开允许你构建一个分布式的的两阶段提交协议。
分享到:
相关推荐
lucene,lucene教程,lucene讲解。 为了对文档进行索引,Lucene 提供了五个基础的类 public class IndexWriter org.apache.lucene.index.IndexWriter public abstract class Directory org.apache.lucene.store....
【Lucene 4.7.0 全套JAR包详解】 Lucene是一个开源全文搜索引擎库,由Apache软件基金会开发并维护。它提供了一个高级、灵活的文本搜索API,允许开发者轻松地在应用程序中实现复杂的搜索功能。这次提供的“lucene-...
lucene3.0 lucene3.0 lucene3.0 lucene3.0 lucene3.0
本压缩包包含的是Lucene 3.5.0版本的全部源码,对于想要深入理解Lucene工作原理、进行二次开发或者进行搜索引擎相关研究的开发者来说,是一份非常宝贵的学习资源。 Lucene 3.5.0是Lucene的一个重要版本,它在3.x...
Lucene是一款强大的全文搜索引擎库,广泛应用于各种数据检索场景。在C#环境下,利用Lucene进行时间区间搜索是提高数据检索效率和精确度的重要手段。本篇将深入探讨如何在C#中实现Lucene的时间区间查询匹配,以及涉及...
在IT领域,搜索引擎技术是至关重要的,而Lucene作为一个开源全文搜索引擎库,广泛应用于各种文本检索系统中。本文将深入探讨Lucene示例中的BM25相似度计算,旨在帮助初学者理解如何利用Lucene 4.7.1版本构建索引、...
《Lucene in Action》是关于Apache Lucene的权威指南,这本书深入浅出地介绍了全文搜索引擎的构建和优化。Lucene是一个高性能、全文本搜索库,它允许开发人员在应用程序中轻松实现复杂的搜索功能。这本书主要面向...
赠送jar包:lucene-core-7.7.0.jar; 赠送原API文档:lucene-core-7.7.0-javadoc.jar; 赠送源代码:lucene-core-7.7.0-sources.jar; 赠送Maven依赖信息文件:lucene-core-7.7.0.pom; 包含翻译后的API文档:lucene...
《Lucene in Action 第二版》是一本深入探讨Apache Lucene全文检索库的专业书籍,它在Java开发领域具有很高的权威性。这本书详细介绍了如何利用Lucene进行高效的文本搜索和索引构建,是Java开发者和信息检索爱好者的...
《Annotated Lucene 中文版 Lucene源码剖析》是一本深入探讨Apache Lucene的书籍,专注于源码解析,帮助读者理解这个强大的全文搜索引擎库的工作原理。Lucene是一款开源的Java库,它提供了高效的文本搜索功能,被...
《全面解析Lucene jar包:从基础到应用》 在信息技术高速发展的今天,搜索引擎已经成为我们获取信息不可或缺的工具。在Java领域,Lucene作为一个强大的全文搜索引擎库,深受开发者喜爱。本文将详细介绍“lucene所有...
**Lucene原理详解** Lucene是一个高性能、全文检索库,由Apache软件基金会开发并维护,是Java编程语言中广泛使用的搜索引擎库。它提供了一个简单但功能强大的API,用于索引和搜索文本数据,使得开发者可以轻松地在...
【Lucene 简介】 Lucene 是一个强大的开源全文搜索库,由 Java 编写,主要用于为应用程序添加全文检索功能。它不是一个完整的全文搜索引擎应用,而是一个工具包,允许开发者将其集成到自己的软件中,以实现高效、...
**Lucene 2.0 API 和 Lucene 3.0 API 深度解析** Lucene 是一个由 Apache 软件基金会开发的全文搜索引擎库,它为开发者提供了在 Java 应用程序中实现高性能、可扩展的全文搜索功能的能力。Lucene 的 API 设计得相当...
《Lucene与关系型数据库对比:深度解析与应用探索》 在信息爆炸的时代,数据管理和检索成为了企业乃至个人日常工作中不可或缺的部分。随着技术的发展,不同的数据处理方式应运而生,其中Lucene与关系型数据库作为两...
Lucene 是一个强大的开源全文搜索引擎库,它允许开发者在自己的应用程序中实现高级的搜索功能。而 Luck 是 Lucene 的一个可视化工具,版本为 6.5.0,它为 Lucene 的索引提供了直观的界面,帮助用户更好地理解和调试 ...
Apache Lucene是一个开源全文搜索引擎库,它为Java开发者提供了强大的文本搜索功能。在这个"Lucene 5 主要jar包"中,我们找到了一系列与Lucene 5.0.0相关的jar文件,这些文件是构建和运行基于Lucene的搜索应用程序的...
《Lucene 4.7.2 Demo:Java全文搜索引擎的核心技术探索》 Lucene,作为Apache软件基金会的一个开源项目,是Java平台上的一个全文搜索引擎库。它的主要功能是提供高效、可扩展的文本检索和分析能力。在4.7.2这个版本...
标题"Lucene资料大全(包括Lucene_in_Action书等)"表明这是一个包含全面Lucene学习资源的集合,其中最显著的是《Lucene_in_Action》这本书。这是一本广泛认可的关于Apache Lucene的权威指南,通常被简称为LIA,它深入...