转载请务必注明,原创地址,谢谢配合!
http://qindongliang1922.iteye.com/blog/1998532
散仙,在上篇文章,分析了IndexWriterConfig的作用以及一些功能,今天在这开始之前,我们再来简单回顾下,IndexWriterConfig的作用。
IndexWriterConfig保存了一些运行时的配置参数,这些参数会在程序运行期间一直存在,所以在大多数时候我们只需要一份单例的IndexWriterConfig即可,而IndexWriterConfig又是Lucene内部实现的线程安全的类,所以在一些需要同步的场景时,我们没必要给IndexWriterConfig在应用外围,在加上自己的线程安全逻辑,IndexWriterConfig里面的IndexWriterConfig.setRAMBufferSizeMB(double)方法和IndexWriterConfig.setMaxBufferedDocs(int)).方法,是2个比较重要的调优方法,一般情况下,我们可以根据自己服务器的配置,来适当的加大这个参数的比值,通过更大的参数,来实现更给力的批处理添加,当然这个也得根据我们的实际环境以及磁盘IO等等来定。
IndexWriter是负责创建和维护索引的重要的类,一些配置信息的获取主要来自IndexWriterConfig类,另外我们还需要一个文件目录来存放索引,所以我们经常看见如下的一行代码:
IndexWriter writer=new IndexWriter(directory, writerConfig);
之所以说IndexWriter是一个重要的索引管理类,不仅仅是因为它提供基于操作索引的增删改查的能力,而且一个很重要的表现就是,它具有二阶段提交的事务功能,看源码我们就会发现它实现2个接口,一个Closeable接口和TwoPhaseCommit接口:
public class IndexWriter implements Closeable, TwoPhaseCommit{
正是由于 TwoPhaseCommit接口,所以IndexWriter 才具备了2阶段的事务功能,以及可恢复的回滚功能,这个功能,在某些突发的意外情况里可以正确的保证索引结构的安全和稳定,即使是索引添加失败,也可以通过回滚功能,恢复上一次提交前的状态。
下面给出一些IndexWriter里面,比较常用和重要的几个方法:
方法名 | 描述 |
addDocument(Iterable<? extends IndexableField> doc) | 添加一个doc |
addDocument(Iterable<? extends IndexableField> doc, Analyzer analyzer) | 添加一个doc,使用指定的分词器 |
addDocument(Iterable<? extends IndexableField> doc, Analyzer analyzer) | 基于Directory的合并索引 |
addIndexes(IndexReader... readers) | 基于IndexReader的合并索引 |
deleteAll() | 删除所有的索引 |
deleteDocuments(Query... queries) | 删除doc数据,来自多个query的结果 |
deleteDocuments(Query query) | 删除doc数据,来自一个query的结果 |
deleteDocuments(Term term) | 删除doc数据,来自一个term |
flush(boolean triggerMerge, boolean applyAllDeletes) | 刷新缓冲区到磁盘上 |
forceMerge(int maxNumSegments) | 合并段文件 |
maxDoc() | 返回文档总数不包含已经删除的 |
numDocs() | 返回文档总数包含已经删除的 |
rollback() | 在没有进行最终提交前,回滚数据 |
updateDocument(Term term, Iterable<? extends IndexableField> doc) | 更新一个doc,实际上是先删除后添加的策略 |
tryDeleteDocument(IndexReader readerIn, int docID) | 基于docid的删除方法,注意indexreader必须使用的是最新的,也就是基于近实时的,这样保证删除不会发生意外 |
waitForMerges() | 阻塞程序直至合并完成 |
最后,在唠叨几句,在上面的一些方法中,有几个方法时非常有用的,基本的增删改的那个就不多说了,除此之外还要注意的是,addIndexes(IndexReader... readers) 这个方法,因为lucene默认的任何时候都只能单线程写的局限性,所以在大批量建索引的时候,这可能是一个影响的性能的环节,所以建议使用多个线程建索引,分别建在不同的目录,那么最后就存在一个问题,我们怎么合并索引? 这个时候就是这个方法大显身手的时候了,使用它可以建多份索引合并成一份索引,或许你还想提升性能,你也可以开启复合索引,但这个针对少写多读的场景是非常适合 的,如果更新频繁,那么并不适合使用复合索引。另外一个forceMerge(int maxNumSegments) 这个方法,是合并索引里面段文件的方法,通过合并一些小段,可以用来,压缩空间,同样的对于提升性能也是有一定效果的,注意这个参数并不是意味着越小越好,当我们索引很大的时候,合并成多个段,也是一个不错的选择。
今天,就写到这里吧,最后感谢各位道友,耐心看完此篇,文章若有不足之处,欢迎指正交流!
转载请务必注明,原创地址,谢谢配合!
http://qindongliang1922.iteye.com/blog/1998532
分享到:
相关推荐
在"lucene4.3 按坐标距离排序"这个主题中,我们将探讨如何在Lucene 4.3版本中利用地理位置信息进行文档排序,特别是在处理地理空间搜索时的应用。 首先,Lucene 4.3引入了对地理空间搜索的支持,这允许我们根据地理...
Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。Lucene是一套用于全文检索和搜寻的开源程式库,由Apache软件基金会...
lucene4.3增删改查的的一个工具类,对新手来说是一份不可多得的入门资料。
全文检索lucene 4.3 所用到的3个jar包,包含lucene-queryparser-4.3.0.jar、 lucene-core-4.3.0.jar、lucene-analyzers-common-4.3.0.jar。
《Lucene高级搜索进阶项目_04》 在深入探讨Lucene的高级搜索进阶项目时,我们首先需要理解Lucene的核心概念及其在信息检索中的应用。Lucene是一个高性能、全文本搜索库,它提供了丰富的搜索功能,包括布尔运算、...
本课程由浅入深的介绍了Lucene4的发展历史,开发环境搭建,分析lucene4的中文分词原理,深入讲了lucenne4的系统架构,分析lucene4索引实现原理及性能优化,了解关于lucene4的搜索算法优化及利用java结合lucene4实现...
lucene4.3源代码 censed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information ...
Lucene是一个开源的全文搜索引擎库,由Apache软件基金会开发并维护。在Java编程环境中,它为开发者提供了强大的文本检索功能,使得在海量数据中快速查找相关信息变得简单易行。本篇文章将详细探讨Lucene 4.3.1版本的...
共13页07.Lucene搜索实战1 共4页08.Lucene搜索实战2 共5页09.Lucene搜索深入实战1 共5页10.Lucene搜索深入实战2 共11页11....Lucene高级进阶1 共23页16.Lucene高级进阶2 共4页17.Lucene高级进阶3 共4页18.Lucene排序...
结合笔者的实际开发经验,总结了一些新的开发技巧和开发思路,并对网上流传的一些错误...本书既可为零起点的Lucene初学者提供系统全面的学习指导,也可帮助有相关经验的开发者解决在开发过程中遇到的一些难题和疑惑。
在本课程中,我们主要探讨了Lucene 4.x版本的高级进阶应用,特别是针对大规模文档搜索引擎的构建。Lucene作为一个开源全文搜索引擎库,它提供了高效、灵活的索引和搜索功能,是构建高性能搜索系统的基石。在这个部分...
1.XunTa是在lucene4.3上创建的通过“知识点”来找人的搜人引擎。 输入一个关键词(或组合),XunTa返回一个排名列表,排在前面的人是与该关键词(组合)最相关的“达人”。 可访问 http://www.xunta.so立即体验...
在高级进阶部分,我们将重点探讨Lucene在索引、搜索、排序、过滤以及分词器等方面的高级用法,旨在帮助开发者掌握Lucene的精髓,打造高效、精确的搜索体验。 1. **Document与索引更新**: 在Lucene中,`Document`...
Lucene是Java开发的开源库,它提供了文本分析、索引和搜索功能,使得开发者能够轻松地在应用程序中实现复杂的搜索功能。这个项目的重点在于提升对Lucene高级特性和优化技巧的理解。 首先,我们要了解Lucene的核心...
【Lucene4.X实战类baidu搜索的大型文档海量搜索系统】课程主要涵盖了Lucene搜索引擎的各个方面,包括基础和高级进阶。以下是课程的主要知识点: 1. **Lucene入门与系统架构**:介绍Lucene的基本概念,以及其系统...
通过学习《Lucene搜索-引擎开发权威经典》的第二部分,读者不仅能掌握Lucene的基本用法,还能深入理解其内部机制,从而在实践中更有效地利用这一强大的全文检索工具。对于希望从事信息检索、搜索引擎开发或大数据...
共13页07.Lucene搜索实战1 共4页08.Lucene搜索实战2 共5页09.Lucene搜索深入实战1 共5页10.Lucene搜索深入实战2 共11页11....Lucene高级进阶1 共23页16.Lucene高级进阶2 共4页17.Lucene高级进阶3 共4页18.Lucene排序...
共13页07.Lucene搜索实战1 共4页08.Lucene搜索实战2 共5页09.Lucene搜索深入实战1 共5页10.Lucene搜索深入实战2 共11页11....Lucene高级进阶1 共23页16.Lucene高级进阶2 共4页17.Lucene高级进阶3 共4页18.Lucene排序...
共13页07.Lucene搜索实战1 共4页08.Lucene搜索实战2 共5页09.Lucene搜索深入实战1 共5页10.Lucene搜索深入实战2 共11页11....Lucene高级进阶1 共23页16.Lucene高级进阶2 共4页17.Lucene高级进阶3 共4页18.Lucene排序...
共13页07.Lucene搜索实战1 共4页08.Lucene搜索实战2 共5页09.Lucene搜索深入实战1 共5页10.Lucene搜索深入实战2 共11页11....Lucene高级进阶1 共23页16.Lucene高级进阶2 共4页17.Lucene高级进阶3 共4页18.Lucene排序...