Apache Lucene 2.9的改进

2014-02-09  来源:本站原创  分类:系统架构  人气:0 

Lucene 2.9的大部分重心放在了性能优化方面,这体现在从低端的内部基础结构改进到索引管理方式等多个方面。Lucene的索引数据库由一系列分离的“片断”组成,每个片段存放在独立的文件中。当你向索引中添加文档时,便会不断创建一些可以合并的新片断。Lucene会在FieldCache中缓存字段信息,不过在Lucene 2.4以及之前的版本中,加载字段缓存的开销相对较高,尤其在2.4版本中还会不断重新加载整个字段缓存。在发布2.9版本的准备过程中,Lucene团队意识到,在进行合并或删除的时候片断的改变频率通常比较高,不过较早的片断则更趋向于保持不变。因此,修改后的字段缓存只会加载更新过的片断。

Lucene跨片断加载FieldCache的效率也不够好。因此,2.9版本会为每个片段分别管理FieldCache,以此避开跨片断加载FieldCache的需求。这个改变的效果非常明显,Lucid Imagination的Mark Miller运行了一个简单的性能测试,表明在5,000,000个不同字符串下的情况下,Lucene 2.9相对于2.4版本会获得15倍左右的性能提高:
Lucene 2.4: 150.726s
Lucene 2.9: 9.695s

另一个显著的性能提高在于重开(re-opening)搜索的时候。Lucene 2.9引入了新的IndexWriter.getReader()方法,它可用于搜索目前完整的索引,包括当前IndexWriter会话中还没有提交的改变,这带来了接近于实时搜索的能力。此外,你还可以调用IndexWriter.setMergedSegmentWarmer()方法进行“预热”,这样那些片断便可以立即投入使用了。

另一个重大变化则是数字的处理方式,尤其是在范围查询(如“给我找出价格在0.5到9.99英镑之间的CD”)的场景下。在2.9版之前,Lucene的查询完全基于文本,因此对于数字的处理则变成了基于字符串的精确编码。这种做法经常会生成大量独立的关键字,Lucene需要通过遍历的方式来构建整个结果集。在此之前,许多开发人员使用了自定义的编码规则来应对这种情况,不过Lucene 2.9已经自带对数字的处理方式。Field和Query类会采取合适的精度进行索引和搜索,这样大大降低了需要搜索的关键字数量,使查询的响应能力得以显著提高。

2.9版本还引入了新的查询类型和适用性更广的多关键字查询(通配、前缀等等)方式,以及新的针对波斯语,阿拉伯语及中文的分析器。此外,这次更新还包括更好Unicode支持,一个新的查询分析框架,以及对地理位置的查询,它允许根据距离信息对文档进行过滤和排序(如“找出我家5英里范围内的所有干洗店”)。你可以在这里找到完整的改进列表。

一般来说,Lucene会在主要版本之间保持完整的兼容性,但是CHANGES.txt的“向后兼容策略”一节中列举了Lucene 2.9在许多地方对兼容性的破坏。对于2.9版本的升级操作很可能需要一次重新编译,合适完整的回归测试以及其它在这方面的努力。基于2.9版本的重新编译也会提示出所有即将被废弃的方法,这样开发人员便可以升级他们的应用程序,并为3.0版本作好准备。这是个明智的做法,因为Lucene 3.0会放弃对Java 1.4的支持,并且删除所有2.9版本中被标记为“deprecated”的功能。

查看英文原文:Apache Lucene 2.9 Released
本文来自:http://www.infoq.com/cn/news/2009/10/lucene29

相关文章
  • Apache Lucene 2.9的改进 2014-02-09

    Lucene 2.9的大部分重心放在了性能优化方面,这体现在从低端的内部基础结构改进到索引管理方式等多个方面.Lucene的索引数据库由一系列分离的"片断"组成,每个片段存放在独立的文件中.当你向索引中添加文档时,便会不断创建一些可以合并的新片断.Lucene会在FieldCache中缓存字段信息,不过在Lucene 2.4以及之前的版本中,加载字段缓存的开销相对较高,尤其在2.4版本中还会不断重新加载整个字段缓存.在发布2.9版本的准备过程中,Lucene团队意识到,在进行合并或删除

  • Apache Lucene 4.8.0发布:不再支持Java 6 2015-04-16

    2014年4月28日,Apache Lucene 4.8.0正式发布.由于老的JDK版本的一些JVM bug会影响到Lucene,所以新版本的Lucene不再支持JDK 7u55以下的Java版本.另外Lucene 4.8.0全面兼容Java 8.以下是Lucene 4.8.0中的一些重大改进: 所有的索引文件开始存储端到端的校验以在索引合并和读取的时候进行有效性检查.这样可以确保因为JVM内部的一些硬件问题或者BUG而引起的索引损坏可以被及时发现. 提供了新的Rescorer/QueryRes

  • Using the Apache Lucene text search 2008-08-15

    Introduction Lucene is an open source, highly scalable search engine library, you can get from the Apache Software Foundation. You can use Lucene for commercial and open source applications. Lucene powerful API focuses on text indexing and search. It

  • Use Apache Lucene and Solr to location-aware search (change) 2009-08-29

    Turn a good text for the search of people to do more useful, the content is not posted, and paste addresses can be regarded as support for original bar. Use Apache Lucene and Solr to location-aware search

  • org.apache.lucene.analysis.TokenStream.incrementToken () Z 2010-05-28

    Integrate the use of lucene3 and paoding may occur when the following error: Exception in thread "main" java.lang.AbstractMethodError: org.apache.lucene.analysis.TokenStream.incrementToken () Z at org.apache.lucene.index.DocInverterPerField.proc

  • apache lucene structure and main classes 2010-11-08

    Apache lucene provides functionality can be viewed as general information into the index for some, and then search the data based on search terms in some of the content. Among the class is divided into two kinds of construction index and search. Firs

  • Using the Apache Lucene search text (to) 2010-11-15

    Introduction Lucene is an open source, highly scalable search engine library, you can get from the Apache Software Foundation. You can use Lucene for commercial and open source applications. API focuses on the powerful Lucene text indexing and search

  • Exception in thread "main" java.lang.NoClassDefFoundError: org / apache / lucene / in 2010-11-26

    Depressing question: Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/lucene/index/memory/MemoryIndex Do not call this class is not clear, how this problem occurs, the results of the contrib \ memory lucene-memory-3.0.2.jar

  • Using the Apache Lucene search text (turn) 2010-11-15

    Introduction Lucene is an open source, highly scalable search engine library, you can get from the Apache Software Foundation. You can use Lucene for commercial and open source applications. Lucene's API is a powerful text indexing and searching atte

  • java.lang.NoClassDefFoundError: org / apache / lucene / index / memory / MemoryIndex 2011-06-26

    Lucence3.0 search framework exception: root cause: java.lang.NoClassDefFoundError: org / apache / lucene / index / memory / MemoryIndex Solution: Import the Web project under lucene-memory-3.0.1.jar package, the package lucene-3.0.1 \ contrib \ memor

  • Apache Lucene与Lucene.Net--全文检索服务器 2014-02-06

    十年前,在Windows世界中使用开源项目简直是不可想象的一件事.现在.NET程序员在Java平台上验证并开发的企业级软件世界中也开始觉醒了.今天让我们一起来看看流行的全文检索引擎--Apache Lucene与Lucene.Net. Apache Lucene与其兄弟Lucene.Net是经过了大规模测试的产品,他们已经为一些著名站点如Wikipedia.CNET及Monster.com提供了搜索功能.因此,没人会怀疑其功能与未来的发展. Lucene并不是一个爬行搜索引擎,也不会自动地索引内

  • [手把手教你全文检索]Apache Lucene初探 2014-10-22

    PS: 苦学一周全文检索,由原来的搜索小白,到初次涉猎,感觉每门技术都博大精深,其中精髓亦是不可一日而语.那小博猪就简单介绍一下这一周的学习历程,仅供各位程序猿们参考,这其中不涉及任何私密话题,因此也不用打马赛克了,都是网络分享的开源资料,当然也不涉及任何利益关系. 如若转载,还请注明出处--xingoo 讲解之前,先来分享一些资料 首先呢,学习任何一门新的亦或是旧的开源技术,百度其中一二是最简单的办法,先了解其中的大概,思想等等.这里就贡献一个讲解很到位的ppt.已经被我转成了PDF,便于搜藏

  • Apache Lucene and Solr to use location-aware search 2011-04-25

    http://www.ibm.com/developerworks/cn/java/j-spatial/ # The concept of geo-spatial search space in the building search applications, the most important is to identify the need to add to the application of spatial data. These data are usually in some f

  • Apache Lucene 几种分词系统 2015-02-26

    1. StopAnalyzer StopAnalyzer能过滤词汇中的特定字符串和词汇,并且完成大写转小写的功能. 2. StandardAnalyzer StandardAnalyzer根据空格和符号来完成分词,还可以完成数字.字母.E-mail地址.IP地址以及中文字符的分析处理,还可以支持过滤词表,用来代替StopAnalyzer能够实现的过滤功能. 3. SimpleAnalyzer SimpleAnalyzer具备基本西文字符词汇分析的分词器,处理词汇单元时,以非字母字符作为分割符号.

  • Apache Solr:基于Lucene的可扩展集群搜索服务器 2015-01-21

    Apache Solr项目,是一款基于Apache Lucene的开源企业搜索服务器,最近发布了1.3版.InfoQ采访了Solr的创建者Yonik Seeley,了解了新版本的更多信息和Solr提供给最终用户的功能. Seeley首先描述了目标用户:"需要搜索框.分面浏览(导航)或者两者结合的任何人",Solr的关键特性包括: 基于标准的开放接口--Solr搜索服务器支持通过XML.JSON和HTTP查询和获取结果. 易管理--Solr可以通过HTML页面管理,服务器统计数据以JMX

  • 为什么说Lucene不好 2014-10-24

    引言 在Lingway公司,我们使用了Lucene至进今已有好几年时间.对那些刚接触Lucene的人来说,这里是使用它的关键:Apache Lucene是一个由java编写的高性能,全方位的单词搜索引擎库. 在批评它之前,我必须承认Lucene是一个高性能的划词搜索引擎.几年来,Lucene已经被看作是用java编写的嵌入式搜索引擎中的一等公民.它的声誉每日剧增,并且仍然是开源java搜索引擎中的最佳.每个人都在说:"Doug Cutting做了一项伟大的工作".然而,最近的几个月内,

  • Lucene:基于Java的全文检索引擎简介 2012-02-02

    Lucene是一个基于Java的全文索引工具包. 基于Java的全文索引引擎Lucene简介:关于作者和Lucene的历史 全文检索的实现:Luene全文索引和数据库索引的比较 中文切分词机制简介:基于词库和自动切分词算法的比较 具体的安装和使用简介:系统结构介绍和演示 Hacking Lucene:简化的查询分析器,删除的实现,定制的排序,应用接口的扩展 从Lucene我们还可以学到什么 另外,如果是在选择全文引擎,现在也许是试试 Sphinx的时候了:相比Lucene速度更快, 有中文分词的

  • Apache Mahout:适合所有人的可扩展机器学习框架 2012-07-11

    在软件的世界中,两年就像是无比漫长的时光.在过去两年中,我们看到了社交媒体的风生水起.大规模集群计算的商业化(归功于 Amazon 和 RackSpace 这样的参与者),也看到了数据的迅猛增长以及我们诠释这些数据的能力的显著提升."Apache Mahout 简介" 最初在 developerWorks 上发表也已经是两年之前的事情.这之后,Mahout 社区(以及项目的代码库和功能)取得了长足的发展.Mahout 也得到了全球各地各种规模的企业的积极采用. 在我撰写的 Apache

  • APACHE SOLR基础篇 2014-02-06

    一.配置和安装solr 1. 首先去apache官方网站下载solr,下载地址 http://labs.renren.com/apache-mirror//lucene/solr/3.4.0/ 目前最新的是3.4的版本 2. 下载后解压目录如下 client是一个ruby实现的示例,这个我们暂时不管 contrib有一些功能模块是需要的jar包 dist是打包发布好的工程war包 docs是帮助文档 example是示例,里面有打包部署好的solr工程示例和servlet容器jetty.如果你没

  • Lucene 学习资料 2014-08-16

    Lucene是一个基于Java的全文索引工具包. 另外,如果是在选择全文引擎,现在也许是试试Sphinx的时候了:相比Lucene速度更快,有中文分词的支持,而且内置了对简单的分布式检索的支持: 基于Java的全文索引/检索引擎--Lucene Lucene不是一个完整的全文索引应用,而是是一个用Java写的全文索引引擎工具包,它可以方便的嵌入到各种应用中实现针对应用的全文索引/检索功能. Lucene的作者:Lucene的贡献者DougCutting是一位资深全文索引/检索专家,曾经是V-Tw