很多人会抱怨 Lucene 在数据量增加到一定规模的时候,性能会出现明显下降,对于并发用户访问的支持能力也比较弱。其实在工程师所遇到的绝大多数环境下 Lucene 的性能问题,往往是因为系统没有经过良好的调优。而非简单的 Lucene 设计缺陷所造成。
当前使用 Lucene 的知名网站包括,Stack Exchange,旗下全球最大的事实性问答网站 StackOverFlow.com .
基于 Lucene 文档 “How to make indexing faster”,我们可以看到如下经验可能可以应用于 Lucene 优化。
确定的确需要进行索引性能调优
很多场景之下,性能问题其实表现为整体数据架构设计的问题,而不仅仅是通过索引所可以解决的。在决定进行索引性能调优之前,可能需要首先判断,是否数据架构上出现了情况。
确定在使用最新版本的Lucene
Lucene也是在不断发展之中。新版本的Lucene通常性能都会有些改善。
使用更快的硬件,例如,改善IO系统性能
通常硬件性能的改善对于系统整体性能提升是立竿见影的。例如,通过SSD硬盘(Solid-State Disk,固态硬盘)取代通常的 SATA 或者 SAS 硬盘,将可以获得明显的系统性能提升。
在建立索引过程中,使用单例的 Writer
基于内存执行 Flush 而不是基于 document count
在 Lucene 2.3 及其以上系统中,IndexWriter可以基于内存执行Flush操作。调用 writer.setRAMBufferSizeMB() 可以设置Buffer大小。
尽量多使用内存
内存越多,Lucene应对海量数据的时候性能明显加强。
关闭复合文件格式(Compound file format)
调用 setUseCompoundFile(false),可以关闭。建立复合文件,将可能使得索引建立时间被拉长,有可能达到7%-33%。而关闭复合文件格式,将可能大大增加文件数量,而由于减少了文件合并操作,索引性能被明显增强。
重用文档与字段实例
这是在 Lucene 2.3 之后才有的一个新技术。在之前如果要修改某个记录,需要删除掉索引中的文档,然后重新添加。而新的方法通过 setValue 实现。这将有助于更有效的减少GC开销而改善性能。
在存储字段数据以及执行 term vectors 的时候,使用同样的字段顺序添加文档
这样将有助于保证合并操作的性能。
在Analyzer中重用单例的Token
在表示 Token 文本内容的时候,使用 char[] API 而不要使用 String API
显然 char 的结构更简单,而操作也更加快速。基于String的性能通常都不怎么好。
在打开 IndexWriter 的时候,设置 autoCommit = false
同传统的数据库操作一样,批量提交事务性能总是比每个操作一个事务的性能能好很多。
同样,对于实时性要求不是很强的系统。通过标记,并定时进行索引和优化,也将比随时进行索引操作性能能改善很多。
不要使用太多的小字段,如果字段过多,尝试将字段合并到一个更大的字段中,以便于查询和索引
适当增加 mergeFactor,但是不要增加的太多。
关闭所有不需要的特性
使用更快的 Analyzer
特别是对于中文分词而言,分词器对于性能的影响更加明显。
加快文档的构造速度
通常,从数据库,文件系统,或者网络爬行过程中,都可能因为上游程序处理的性能而影响 Lucene 文档建立的速度。
除非真的需要改善索引性能,通常不要特别进行优化
对于一个实例的 IndexWriter 可以使用多线程或者并发技术
使用Java Profiler分析 Lucene 和调用程序的性能,并由此改善性能
- 浏览: 40517 次
- 性别:
- 来自: 北京
相关推荐
《深入理解Lucene索引查看程序与代码》 在信息技术领域,搜索引擎的高效运作离不开底层索引技术的支持,而Lucene作为Apache软件基金会的一个开放源代码项目,正是一个强大的全文检索库,它提供了高效的文本搜索功能...
**Lucene索引器实例详解** Lucene是一个高性能、全文本搜索库,由Apache软件基金会开发,被广泛应用于各种搜索引擎的构建。它提供了一个高级的、灵活的、可扩展的接口,使得开发者能够轻松地在应用程序中实现全文...
在 Lucene 的使用过程中,创建索引是关键步骤,而有时我们需要查看这些索引来了解其结构、内容以及优化搜索性能。这就是"Lucene 索引 查看 工具"的用途,它可以帮助我们分析和理解 Lucene 索引的工作原理。 主要...
Lucene 是一个高性能、全文本搜索库,由 Apache 软件基金会开发并维护。它提供了高级的文本分析和检索功能,广泛应用于各种搜索引擎和信息检索系统。在使用 Lucene 进行信息检索时,有时我们需要对建立的索引进行...
本教程主要探讨的是如何利用Lucene进行索引优化,特别是通过多线程和处理多个目录来提高索引创建效率。 首先,我们需要理解Lucene的索引原理。Lucene将文档分解为词项(tokens),并对每个词项创建倒排索引。倒排...
**Lucene索引和查询** Lucene是Apache软件基金会的开放源码全文搜索引擎库,它提供了文本检索的核心工具,使得开发者能够快速构建自己的搜索应用。本项目中的代码旨在展示如何利用Lucene对多个文件夹下的数据进行...
以下是对Lucene索引机制的详细解析: 一、Lucene的索引过程 1. 文档分析:当向Lucene添加文档时,首先会经过一个分词器(Tokenizer),将文本拆分成一系列的词项(Token)。接着,这些词项会被过滤(Filter)和...
`Luck`,全称`Luke`,是一款强大的Lucene索引浏览器和分析器工具,可以帮助开发者、数据分析师以及对Lucene感兴趣的人员查看、理解和调试Lucene索引。 `Luke 7.4.0`是这款工具的一个特定版本,它专门设计用来与...
《深入理解Lucene索引文件查看工具LukeAll 4.7.1》 在信息检索领域,Lucene作为一款强大的全文...无论你是Lucene新手还是经验丰富的开发者,都能从中受益,提升对Lucene索引的理解,从而更好地构建和优化搜索系统。
以上就是关于“Lucene索引的简单使用”的详细介绍,包括其核心概念、创建和查询索引的步骤以及一些高级特性。希望对你理解和应用Lucene有所帮助。在实际开发中,可以根据需求选择合适的Analyzer,优化索引策略,以...
《深入理解Luke:洞察Lucene索引...通过分析Luke的源码,我们可以学习到如何操作和调试Lucene索引,这对于优化搜索算法、提高检索效率具有重大意义。同时,这也为自定义Lucene插件或者开发类似工具提供了基础和灵感。
**Lucene索引结构原理** Lucene是Apache软件基金会的开放源代码全文搜索引擎库,它为Java开发人员提供了强大的文本搜索功能。理解Lucene的索引结构原理对于优化搜索性能和设计高效的搜索应用至关重要。 首先,我们...
以下是对Lucene索引文件格式的详细说明。 首先,我们要理解Lucene索引的基本结构。一个Lucene索引位于一个文件夹中,这个文件夹包含了多个段(Segment)。每个段是独立的,包含了一组文档,并且可以与其他段合并。...
**Lucene索引的基本操作** Lucene是一款由Apache软件基金会开发的全文检索库,它提供了高效、可扩展的全文检索功能。...在实际应用中,还需要考虑更多的因素,如性能优化、多线程支持、错误处理等。
**Lucene封装与性能优化详解** Lucene是一个高性能、全文本搜索库,它为开发者提供了在应用程序中实现全文检索的功能。然而,为了更好地适应实际项目需求,通常需要对其进行封装,以便于管理和提升性能。本文将深入...
一个Lucene索引是由多个文件组成的,包括但不限于 segments文件、.del文件(删除文档标记)、.tii和.tis文件(Term Info Index和Term Info postings)、.frx、.fdx、.fdt、.fdt(Field Data)等。这些文件共同构成了...
4. **测试优化**:通过模拟真实环境进行测试,评估系统性能,并针对发现的问题进行优化调整。 #### 六、结论 综上所述,基于Lucene的分布式并行索引技术是解决大数据环境下高效索引构建问题的有效手段。通过采用...
《Lucene索引小示例解析》 Lucene是一个高性能、全文检索库,它由Apache软件基金会开发并维护。在Java编程环境中,Lucene被广泛应用于构建搜索功能,特别是对于大量文本数据的高效检索。本篇文章将通过一个简单的小...
这对于理解和优化索引性能,排查问题,以及了解Lucene内部工作原理非常有帮助。 首先,我们需要明白Lucene索引的基本构成。在Lucene中,索引是由一系列的段(Segment)组成,每个段包含多个文档。这些文档经过分词...
这不仅涵盖了技术细节,还提供了实际操作建议,旨在帮助开发者针对特定场景优化其Lucene索引性能。 ### 知识点详细解析: #### 使用最新版本的Lucene 确保你正在使用Lucene的最新版本至关重要。软件的更新往往伴随...