Lucene 4.0 的重大升级内容一览

标签: lucene 升级 | 发表时间:2011-09-16 05:15 | 作者:accesine960 Frank Cai
出处:http://blog.csdn.net/accesine960


Lucene 4.0 的重大升级内容一览
作者:田春峰,微博


新浪微博上阿朱(博客 ,微博)提示让我说说Lucene 4.0 的特点。最近也在做搜索相关的项目,一直关注Lucene 3.x 之后下一步的发展方向。我就把我了解到的Lucene 4.0的一些资料和大家分享一下。

大家都知道Lucene的作者是Doug Cutting ,这位博士毕业生因为工作不稳定,想学java,当他准备写个项目练练手的时候,也许他没想到这个以他外祖母的姓Lucene 命名的搜索引擎软件包会在此后的让他声名鹊起,并成为了中小型搜索引擎绝对主流的选择。

关于Lucene在国内流行的原因,请大家参考我2004年的一篇博客:为什么会是Lucene 。 http://blog.csdn.net/accesine960/article/details/227134

大概从Lucene 1.4.3 开始后的每次升级,我听到身边程序员抱怨最多的就是:API 改的太恶心了。的确每次升级API都是大幅度的变化,但这也正是Lucene开源社区活跃的表现。每个人都希望Lucene增加这样或者那样的功能,满足这样或者那样的需求。没错,Lucene 4.0 还将延续这种风格!

言归正传,Lucene 4.0 将会有如下翻天覆地的变化:

1、全部使用字节( utf-8 tytes )替代string来构建 term directory 。Mysql 有MyIsam ,Innodb 引擎,为什么Lucene不能有类似的引擎

     带来的好处是:索引文件读取速度 30 倍的提升;占用原来大约10%的内存;搜索过程由于去掉了字符串的转化速度也会明显提升;

     但是如果说这上面的好处只是一个副产品,你会怎么想? 没错,Mysql有MyIsam,Innodb等诸多引擎供我们选择的,Lucene为什么不能向这个方向发展呢?

     实现这个机制的模块叫:Codec (编码器),你可以实现自己的Codec来进行自定义的扩展,很显然Codec的操作对象是Segment 。

     
2、支持多线程建索引,支持:concurrent flushing

     了解过Lucene 3.X的同学们都知道,诸如XXXPerThread 的类在建索引的时候已经支持多线程了,但是当每个线程的内存达到指定上限 (maxBufferedDocs or ramMaxBufferSizeMB)的时候就需要写到硬盘上,而这个过程仍然不是多线程的,仍然需要一个个排队Flush到硬盘。Lucene 4.0 终于支持 concurrent flushing  了。

     支持Concurrent Flushing听起来很酷,具体到Lucene 4.0 里,是增加了一个类来完成这个功能的。

     先看以下类:DocConsumerPerThread , DocFieldConsumerPerThread , DocInverterPerThread , InvertedDocConsumerPerThread 。
  觉得少了什么吗? 对,为什么没有 DocumentsWriterPerThread ,Lucene 4.0 的Concurrent Flushing 正是这个类来实现的。


    图形化单线程Flushing和Concurrent Flushing的对比:
      
    


  
  Luene 4.0 支持 Concurrent Flushing后最主要的问题是索引删除/修改的一致性的问题,这个问题比较复杂,不是本文的重点,就不细说了。


3、 基于有限自动机的模糊匹配算法(FSA算法),FuzzyQuery

     FuzzyQuery 这类查询估计大家用的比较少。在英文中单词拼写错误,比如: Lucene, Licene , lucen  等就可以用FuzzyQuery来进行查询提高查全率。

     在lucene 4.0 之前的FuzzyQuery 的实现非常耗费cpu,实现算法也很暴力。具体过程是:读取每个term,然后计算每个term与查询词的“编辑距离”,如果在指定的范围内则返回。

     Lucene 4.0 使用 Levenshtein Automaton 的来衡量文字的"编辑距离" ,使用有限状态自动机来进行计算。以数百倍的效率提升了FuzzyQuery 的效率。

     Levenshtein 距离我现在还不是很清楚。用单纯的有限状态机知识能大概理解其中的原理,如下图:








综上所述的3点是Lucene 4.0 众多新特性中最重要的部分,很值得大家期待。

作者:accesine960 发表于2011-9-15 22:15:14 原文链接
阅读:406 评论:1 查看评论

相关 [lucene 升级] 推荐:

Lucene索引升级 - rainystars' Blog - SegmentFault

- -
由于Lucene文件格式从2到3以及从3到4版本时都发生了重大的改变,造成了高版本无法读取低版本的数据,使用Lucene中的IndexUpgrader方法先将版本从2升到3,然后再从3升级到4. 从版本2升级到版本3时,需要使用lucene3的jar包,我使用的lucene3.6的jar包,我需要处理的索引是在一个文件夹中所存在的一系列索引文件,所以需要循环来遍历每个目录.

Lucene 4.0 的重大升级内容一览

- Frank Cai - 我要去桂林---田春峰的网志
Lucene 4.0 的重大升级内容一览. 新浪微博上阿朱(博客 ,微博)提示让我说说Lucene 4.0 的特点. 最近也在做搜索相关的项目,一直关注Lucene 3.x 之后下一步的发展方向. 我就把我了解到的Lucene 4.0的一些资料和大家分享一下. 大家都知道Lucene的作者是Doug Cutting ,这位博士毕业生因为工作不稳定,想学java,当他准备写个项目练练手的时候,也许他没想到这个以他外祖母的姓Lucene 命名的搜索引擎软件包会在此后的让他声名鹊起,并成为了中小型搜索引擎绝对主流的选择.

lucene排序

- - 开源软件 - ITeye博客
排序是对于全文检索来言是一个必不可少的功能,在实际运用中,排序功能能在某些时候给我们带来很大的方便,比如在淘宝,京东等一些电商网站我们可能通过排序来快速找到价格最便宜的商品,或者通过排序来找到评论数最高或卖的最好的商品,再比如在Iteye里的博客栏里,每天都会以降序的方式,来显示出最新发出的几篇博客,有了排序,我们就能在某些时候很方便快速的得到某些有效信息,所以说排序功能,无处不在 ^_^.

[原]Lucene系列-facet

- - 文武天下
facet:面、切面、方面. 个人理解就是维度,在满足query的前提下,观察结果在各维度上的分布(一个维度下各子类的数目). 如jd上搜“手机”,得到4009个商品. 其中品牌、网络、价格就是商品的维度(facet),点击某个品牌或者网络,获取更细分的结果. 点击品牌小米,获得小米手机的结果,显示27个.

[原]Lucene系列-FieldCache

- - 文武天下
域缓存,加载所有文档中某个特定域的值到内存,便于随机存取该域值. 当用户需要访问各文档中某个域的值时,IndexSearcher.doc(docId)获得Document的所有域值,但访问速度比较慢,而且只能获得Stored域的值. FieldCache能获得域值数组,根据docId random access域值.

Lucene 使用教程

- - 行业应用 - ITeye博客
1 lucene简介 . 1.1 什么是lucene . Lucene是一个全文搜索框架,而不是应用产品. 因此它并不像 http://www.baidu.com/ 或者google Desktop那么拿来就能用,它只是提供了一种工具让你能实现这些产品. 1.2 lucene能做什么 . 要回答这个问题,先要了解lucene的本质.

Lucene 4.x 之 IndexReader

- - zzm
在Lucene 3.x时代,《Lucene In Action》是一本相当不错的参考书,书中详细介绍了Lucene各种高级使用技术,对于开发者来说非常实用. 但是近期Lucene升级到了4.x版本,在性能等各方面有了很大的提高,值得在新项目中使用. 然而Lucene 4.x中的API相比3.x来说有了很大的改变,《Lucene In Action》中的很多内容都已经过时了,并且由于4.x推出的时间不长,还没有比较好的文档来对用法进行说明,这个系列文章就是想记录下自己使用Lucene 4.x的经验体会,供大家参考使用.

文章: 集成Lucene和HBase

- - InfoQ cn
在所有先进的应用程序中,不管是购物站点还是社交网络乃至风景名胜站点,搜索都扮演着关键的角色. Lucene搜索程序库事实上已经成为实现搜索引擎的标准. 苹果、IBM、Attlassian(Jira)、Wolfram以及很多大家喜欢的公司【1】都使用了这种技术. 因此,大家对任何能够提升Lucene的可伸缩性和性能的实现都很感兴趣.

Solr\Lucene优劣势分析

- - 淘宝网综合业务平台团队博客
最早lucene2.4以及以前,追溯到2008年前后,lucene刚刚引起大家的关注,到后来Nutch. 、solr的出现,lucene变得更加热. Nutch、Solr的发展,极大推动了lucene的升级. 对于一些接触过搜索,使用过lucene、solr的人来说,一般都会感觉lucene、solr很牛逼.