欢迎来到天天文库
浏览记录
ID:39465910
大小:314.54 KB
页数:9页
时间:2019-07-04
《lucene版本对比》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、一、为什么使用lucene1、Lucene不是一个完整的全文索引应用,而是是一个用JAVA写的全文索引引擎工具包,它可以方便的嵌入到各种应用中实现针对应用的全文索引/检索功能。这样的定位,使得lucene有很高的抽象层次,便于扩展和整合到已有的系统。因为对于大多数的全文搜索应用来说,我们需要的是一个开发工具包而不是最终产品(虽然很多搜索引擎也可以扩展特性功能)。这也是程序员最愿意接受的封装层次。2、 Lucene的API接口设计的比较通用,输入输出结构都很像数据库的表==>记录==>字段,所以很多传统的应用的文件、数据库等都可以比较方便的映射到Lucene的存储结构/接口中。(上面语句有些来
2、自 在应用中加入全文检索功能——基于JAVA的全文索引引擎Lucene简介)。二、lucene4.0新特性较重要部分1、全部使用字节(utf-8tytes)替代string来构建termdirectory。带来的好处是:索引文件读取速度30倍的提升;占用原来大约10%的内存;搜索过程由于去掉了字符串的转化速度也会明显提升;但是如果说这上面的好处只是一个副产品,你会怎么想?没错,Mysql有MyIsam,Innodb等诸多引擎供我们选择的,Lucene为什么不能向这个方向发展呢?实现这个机制的模块叫:Codec(编码器),你可以实现自己的Codec来进行自定义的扩展,很显然Codec的操作对象
3、是Segment。2、支持多线程建索引,支持:concurrentflushing。了解过Lucene3.X的同学们都知道,诸如XXXPerThread的类在建索引的时候已经支持多线程了,但是当每个线程的内存达到指定上限(maxBufferedDocsorramMaxBufferSizeMB)的时候就需要写到硬盘上,而这个过程仍然不是多线程的,仍然需要一个个排队Flush到硬盘。Lucene4.0终于支持concurrentflushing了。DocumentsWriterPerThread ,Lucene4.0的ConcurrentFlushing正是这个类来实现的。3、基于有限自动机的模
4、糊匹配算法(FSA算法),FuzzyQueryFuzzyQuery这类查询估计大家用的比较少。在英文中单词拼写错误,比如:Lucene,Licene,lucen等就可以用FuzzyQuery来进行查询提高查全率。在lucene4.0之前的FuzzyQuery的实现非常耗费cpu,实现算法也很暴力。具体过程是:读取每个term,然后计算每个term与查询词的“编辑距离”,如果在指定的范围内则返回。Lucene4.0使用LevenshteinAutomaton的来衡量文字的"编辑距离",使用有限状态自动机来进行计算。以数百倍的效率提升了FuzzyQuery的效率。三、lucene4.0正式版亮点
5、功能:一、通过解码器Codec机制Lucene索引格式与Lucene架构解耦,变成了Plugin方式实现,包括:Terms,Postingslists,Stored字段,TermVectors等都可以以自定义的格式予以支持。正如Mysql支持多种存储引擎一样,现在Lucene也可以了。二、排序相关的算法与向量空间模型解耦(即Lucene中经典的经典的(TF/IDF)模型)。同时提供:最佳匹配OkapiBM25,随机分歧(DivergencefromRandomness),语言模型和基于信息量的模型。不同的算法模型可以组合串联起来使用,这等于完全解放了Lucene的生产力!。三、新的DocVa
6、lues类型可以为每个文档提供存储额外的类型数据。类似:PayLoad,可以在用这个特性自定义排序打分参数。四、IndexWriter写入索引到硬盘支持完全并发,之前IndexWriter在应用层能多线程调用,但在写入硬盘的时候还是逐个线程顺序写入的。这对于经常要重建索引的场景,减少了等待索引的时间。五、每个Document的标准化因子norms不再局限于一个字节。自定义排序的实现可以使用任何DocValues类型的排序因子。六、索引结构更加透明化,增加了索引统计机制,利用这些统计信息,Lucene索引内容不再是一个黑匣子了。包括:提供针对term或者Field的token数量,针对某个fi
7、led的Posting数量,包含某个field的positing的文档数量。当然有了这些索引统计的数据后,就可以自定义的改进评分机制了。也就是说以下方法将会成为你的新朋友:TermsEnum.docFreq(),TermsEnum.totalTermFreq(),Fields.getUniqueTermCount(),Fields.getUniqueFieldCount()七、索引term不再局限于UTF-1
此文档下载收益归作者所有