`

Lucene 的索引性能如何优化

阅读更多

很多人会抱怨 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 和调用程序的性能,并由此改善性能

分享到:
评论

相关推荐

    lucene索引查看程序及代码

    《深入理解Lucene索引查看程序与代码》 在信息技术领域,搜索引擎的高效运作离不开底层索引技术的支持,而Lucene作为Apache软件基金会的一个开放源代码项目,正是一个强大的全文检索库,它提供了高效的文本搜索功能...

    Lucene索引器实例

    **Lucene索引器实例详解** Lucene是一个高性能、全文本搜索库,由Apache软件基金会开发,被广泛应用于各种搜索引擎的构建。它提供了一个高级的、灵活的、可扩展的接口,使得开发者能够轻松地在应用程序中实现全文...

    lucene 索引 查看 工具

    在 Lucene 的使用过程中,创建索引是关键步骤,而有时我们需要查看这些索引来了解其结构、内容以及优化搜索性能。这就是"Lucene 索引 查看 工具"的用途,它可以帮助我们分析和理解 Lucene 索引的工作原理。 主要...

    lucene索引查看工具及源码

    Lucene 是一个高性能、全文本搜索库,由 Apache 软件基金会开发并维护。它提供了高级的文本分析和检索功能,广泛应用于各种搜索引擎和信息检索系统。在使用 Lucene 进行信息检索时,有时我们需要对建立的索引进行...

    Lucene索引和查询

    **Lucene索引和查询** Lucene是Apache软件基金会的开放源码全文搜索引擎库,它提供了文本检索的核心工具,使得开发者能够快速构建自己的搜索应用。本项目中的代码旨在展示如何利用Lucene对多个文件夹下的数据进行...

    Lucene索引文件查看工具lukeall4.7.1

    《深入理解Lucene索引文件查看工具LukeAll 4.7.1》 在信息检索领域,Lucene作为一款强大的全文...无论你是Lucene新手还是经验丰富的开发者,都能从中受益,提升对Lucene索引的理解,从而更好地构建和优化搜索系统。

    深入 Lucene 索引机制

    以下是对Lucene索引机制的详细解析: 一、Lucene的索引过程 1. 文档分析:当向Lucene添加文档时,首先会经过一个分词器(Tokenizer),将文本拆分成一系列的词项(Token)。接着,这些词项会被过滤(Filter)和...

    lucene索引优化多线程多目录创建索引

    本教程主要探讨的是如何利用Lucene进行索引优化,特别是通过多线程和处理多个目录来提高索引创建效率。 首先,我们需要理解Lucene的索引原理。Lucene将文档分解为词项(tokens),并对每个词项创建倒排索引。倒排...

    lucene索引查看工具luck7.4.0

    `Luck`,全称`Luke`,是一款强大的Lucene索引浏览器和分析器工具,可以帮助开发者、数据分析师以及对Lucene感兴趣的人员查看、理解和调试Lucene索引。 `Luke 7.4.0`是这款工具的一个特定版本,它专门设计用来与...

    Lucene 索引的简单使用

    以上就是关于“Lucene索引的简单使用”的详细介绍,包括其核心概念、创建和查询索引的步骤以及一些高级特性。希望对你理解和应用Lucene有所帮助。在实际开发中,可以根据需求选择合适的Analyzer,优化索引策略,以...

    深入 Lucene 索引机制深入 Lucene 索引机制

    Apache Lucene 是一个高性能、全文检索库,由Java编写,其核心设计目标是提供一个灵活、可扩展的搜索功能。它允许开发者在自己的应用程序中...了解并掌握Lucene的索引原理和实践,对于开发高性能的搜索应用至关重要。

    luke源码--查看lucene索引文件

    《深入理解Luke:洞察Lucene索引...通过分析Luke的源码,我们可以学习到如何操作和调试Lucene索引,这对于优化搜索算法、提高检索效率具有重大意义。同时,这也为自定义Lucene插件或者开发类似工具提供了基础和灵感。

    lucene索引结构原理

    **Lucene索引结构原理** Lucene是Apache软件基金会的开放源代码全文搜索引擎库,它为Java开发人员提供了强大的文本搜索功能。理解Lucene的索引结构原理对于优化搜索性能和设计高效的搜索应用至关重要。 首先,我们...

    Lucene索引的基本操作

    **Lucene索引的基本操作** Lucene是一款由Apache软件基金会开发的全文检索库,它提供了高效、可扩展的全文检索功能。...在实际应用中,还需要考虑更多的因素,如性能优化、多线程支持、错误处理等。

    lucene索引库查看器5.3.0

    《深入理解Lucene索引库查看器5.3.0》 Lucene是一个开源的全文检索库,被广泛应用于各种搜索引擎的开发。在对Lucene进行开发和调试时,一个强大的工具——Lucene索引库查看器(Luke)发挥了至关重要的作用。 Luke ...

    lucene的封装和性能优化

    **Lucene封装与性能优化详解** Lucene是一个高性能、全文本搜索库,它为开发者提供了在应用程序中实现全文检索的功能。然而,为了更好地适应实际项目需求,通常需要对其进行封装,以便于管理和提升性能。本文将深入...

    Lucene读取索引文件

    一个Lucene索引是由多个文件组成的,包括但不限于 segments文件、.del文件(删除文档标记)、.tii和.tis文件(Term Info Index和Term Info postings)、.frx、.fdx、.fdt、.fdt(Field Data)等。这些文件共同构成了...

    lucene 索引小示例

    《Lucene索引小示例解析》 Lucene是一个高性能、全文检索库,它由Apache软件基金会开发并维护。在Java编程环境中,Lucene被广泛应用于构建搜索功能,特别是对于大量文本数据的高效检索。本篇文章将通过一个简单的小...

    很好的lucene索引查看工具,欢迎各位lucene研究者前来下载

    这对于理解和优化索引性能,排查问题,以及了解Lucene内部工作原理非常有帮助。 首先,我们需要明白Lucene索引的基本构成。在Lucene中,索引是由一系列的段(Segment)组成,每个段包含多个文档。这些文档经过分词...

    lucene索引结构原理.docx

    而在Lucene中,基本单位是Document,它同样由多个字段组成,但Lucene索引的是这些字段的内容,以加速文本检索。 - **索引构建**:Lucene支持增量索引和批量索引,可以处理数据源的小幅变化或大规模数据。数据库通常...

Global site tag (gtag.js) - Google Analytics