您的位置:首页 > 其它

Lucene的版本迭代

2017-12-25 23:01 225 查看
Lucene已经发展到Lucene 7了,不过,Lucene 7是一个前瞻性的版本,其实,Lucene还在同时升级Lucene5 和Lucene6.

Lucene在之前的版本迭代中,不断尝试新的设计思想,不断引入新的与时俱进的功能。这也导致Lucene的大版本不兼容,在我之前的项目中,从Lucene2升级到Lucene4,再升级到Lucene6,都不能平滑过渡,需要修改项目中使用到Lucene的部分代码。

从Lucene 1.4.3升级到Lucene 2.1

2004年7月,Lucene发布第一个版本Lucene 1.4。多年后的2007年才发布Lucene 2,其中,Lucene 2.4.0使用的最广泛。从Lucene 1.4.3升级到Lucene 2.1,可能需要了解这些改变:

对Field的设计更加合理,使用内部类来区分Field的具体类型:

Field(String name,String value,boolean store,boolean index)


更改为了:

Field(String name, String value, Field.Store store, Field.Index index, Field.TermVector termVector)


BooleanQuery的add方法也改了,原有的是

add(Query q, boolean required, boolean prohibited)


现在也更加面向对象了:

add(Query q, BooleanClause.Occur occur)


QueryParser的parse方法不再是static的了,需要先获取QueryParser实例。

IndexReader类方法签名有稍许改动。

从Lucene 2 升级到Lucene 3.x

Lucene 于2009年11月发布了 Lucene 3.0,这一版本改动了很多API,并加入了Java5的新特性:如泛型、可变参数、枚举。从Lucene 2 升级到Lucene 3.x,可能需要了解这些改变:

对Field的设计更加合理,使用了枚举来区分Field的具体类型:

new Field("id",ids[i],Field.Store.YES,Field.Index.NOT_ANALYZED_NO_NORMS)


IndexWriter中的很多构造函数都被移除了

Search中的很多构造函数都被移除了

QueryParser中的很多构造函数都被移除了

删除了Hits类,使用collector去获取Hits

索引优化,使Lucene可能近实时。

从Lucene 3.x 升级到Lucene 4.x

Lucene 于2012年10月发布了Lucene 4.0,该版本重构了Lucene,基本是Lucene划时代的产品。直接升级需要改动特别多代码,在实际操作中一般是直接使用新版本Lucene 4,只迁移数据。

对Field的设计更加合理,拆分了Field的各种功能:

StringField:不分词、被索引。

TextField:分词、被索引。

StoredField:不被索引,当然也不被分词。

扩展了打分算法:

org.apache.lucene.search.DefaultSimilarity
扩展到了

org.apache.lucene.search.similarities.*


通过编码器Codec机制使得Lucene索引格式与Lucene架构解耦。

增加了模块化API,以模块化方式提供了非结构化信息管理分析器和空间信息搜索模块。

从Lucene 4.x 升级到Lucene 5.x

Lucene 于2015年2月发布了Lucene 5.0,从Lucene 5开始,Lucene 开始考虑向前兼容。

所有文件的访问方法都已基于Java NIO2

Lucene已实现了为每个segment和每次提交都存储了唯一的id,从而使得Lucene能够更加精确地实现索引文件的复制

在索引合并的过程中,IndexWriter总会在合并前检测已经损坏的segment,这就意味着当升级到5.0版本时,对4.X系列的索引进行合并时,会有一定的延迟
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Lucene6 lucene 版本