`
badxy
  • 浏览: 137884 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Lucene IndexDeletionPolicy

阅读更多
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。这两个提交步骤的分开允许你构建一个分布式的的两阶段提交协议。
分享到:
评论
1 楼 mogui258 2010-05-22  
太难理解了,呵呵

相关推荐

    lucene实例lucene实例

    lucene实例lucene实例lucene实例lucene实例lucene实例lucene实例lucene实例lucene实例lucene实例

    lucene,lucene教程,lucene讲解

    lucene,lucene教程,lucene讲解。 为了对文档进行索引,Lucene 提供了五个基础的类 public class IndexWriter org.apache.lucene.index.IndexWriter public abstract class Directory org.apache.lucene.store....

    lucene3.0 lucene3.0

    lucene3.0 lucene3.0 lucene3.0 lucene3.0 lucene3.0

    lucene学习lucene学习

    lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习...

    Lucene3.0特性,Lucene3.0特性

    Lucene3.0特性Lucene3.0特性

    lucene-core-7.7.0-API文档-中文版.zip

    赠送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-core-7.2.1-API文档-中文版.zip

    赠送jar包:lucene-core-7.2.1.jar; 赠送原API文档:lucene-core-7.2.1-javadoc.jar; 赠送源代码:lucene-core-7.2.1-sources.jar; 赠送Maven依赖信息文件:lucene-core-7.2.1.pom; 包含翻译后的API文档:lucene...

    lucene.NET 中文分词

    lucene.NET 中文分词 高亮 lucene.NET 中文分词 高亮 lucene.NET 中文分词 高亮 lucene.NET 中文分词 高亮

    Lucene4.X第九讲-Lucene搜索深入实战

    本课程由浅入深的介绍了Lucene4的发展历史,开发环境搭建,分析lucene4的中文分词原理,深入讲了lucenne4的系统架构,分析lucene4索引实现原理及性能优化,了解关于lucene4的搜索算法优化及利用java结合lucene4实现...

    lucene讲义 叫你用lucene算法

    lucene学习教程lucene讲义 叫你用lucene算法

    lucene4.2 jar包

    lucene-analyzers-common-4.2.0.jar; lucene-analyzers-kuromoji-4.2.0.jar; lucene-analyzers-phonetic-4.2.0.jar; lucene-codecs-4.2.0.jar; lucene-core-4.2.0.jar; lucene-grouping-4.2.0.jar; lucene-...

    lucene3源码分析

    lucene3源码分析

    lucene例子(一个完整的,lucene例子)(lucenetest.rar,lucene,全文检索,lucene例子)

    lucenetest.rar,lucene,全文检索,lucene例子 lucenetest.rar,lucene,全文检索,lucene例子lucenetest.rar,lucene,全文检索,lucene例子

    lucene in action_中文版(lucene实战)

    本书深入浅出地介绍了Lucene——一个开源的使用Java语言编写的全文搜索引擎开发包。它通过浅显的语言、大量的图注、丰富的代码示例,以及清晰的结构为读者呈现出作为优秀开源项目的Lucene 所体现的强大功能。全书共...

    lucene-core-6.6.0-API文档-中文版.zip

    赠送jar包:lucene-core-6.6.0.jar; 赠送原API文档:lucene-core-6.6.0-javadoc.jar; 赠送源代码:lucene-core-6.6.0-sources.jar; 赠送Maven依赖信息文件:lucene-core-6.6.0.pom; 包含翻译后的API文档:lucene...

    Lucene时间区间搜索

    c#下实现Lucene时间区间查询匹配。主要还是对Lucene查循对像Query的实现

    Lucene3.5源码jar包

    Lucene3.5全部源码,打包jar文件,可以直接打开查看源码,Lucene开发必备

    Annotated Lucene 中文版 Lucene源码剖析

    Annotated Lucene 中文版 Lucene源码剖析

    lucene-core-2.9.4,lucene-core-3.0.2,lucene-core-3.0.3,lucene-core-3.4.0

    lucene-core-2.9.4,lucene-core-3.0.2,lucene-core-3.0.3,lucene-core-3.4.0

    Lucene实战

    《Lucene实战(第2版)》基于Apache的Lucene 3.0,从Lucene核心、Lucene应用、案例分析3个方面详细系统地介绍了Lucene,包括认识Lucene、建立索引、为应用程序添加搜索功能、高级搜索技术、扩展搜索、使用Tika提取文本...

Global site tag (gtag.js) - Google Analytics