近日,Apache 软件基金会正式发布了 Apache Lucene 5.0 版本,该版本的重大改进包括实现了更强大且安全的索引和降低了内存堆的使用。同时,该版本还实现了其他方面的一些改进和大量 Bug 的修改。本次更新共包括 32 项新特性、18 项改进、30 个 Bug、40 个 API 的修改以及其它方面的改进。
Lucene 5.0 实现主要更新内容包括:
- 所有文件的访问方法都已基于 Java NIO2 的相关 API 进行了改进,这就使得 Lucene 的索引操作能够更加安全地处理异常
- Lucene 已实现了为每个 segment 和每次提交都存储了唯一的 id,从而使得 Lucene 能够更加精确地实现索引文件的复制
- 在索引合并的过程中,IndexWriter 总会在合并前检测已经损坏的 segment,这就意味着当升级到 5.0 版本时, 对 4.X 系列的索引进行合并时,会有一定的延迟
- 新增了 RoaringDocIdSet 和 SparseFixedBitSet 两个类,从而实现了随机写和 advance-able 稀疏 BitSet,索引所需堆大小能够按照比例来设置多少位和共有多少文档不在索引中
- 新增 Lucene50Codec 编码 / 解码器,这就使得在索引合并时,减少了内存堆的使用,这是因为索引合并时,不是将所有的 Field 加载到堆中,而是先加载当前要合并 Field,合并成功后再删除,然后再加载其他 Field
- 默认的 Norms 格式使用了稀疏编码,这就意味着当进行搜索时,具有大量稀疏 Field 的 Norms 将能够大大减少堆大小的使用
- 该版本新增了用来打印一个树形结构以递归展示索引过程中占用堆大小的 API
- FieldCache 类已经不鼓励使用,当要在某个 Field 上进行排序时,用户应该使用 Doc 值来索引相应的 Field,相对于使用 FieldCache 更加快且耗费较少的堆大小
- 新增一个基于跟踪策略的过滤器缓存,该缓存能够缓存高频率使用的过滤器
- 新增 DateRangeField 类型,该类型能够索引和搜索时间范围、关于 DateRangeField 的多值
- 默认的编 / 解码器新增了一个选项,以用来控制 Filed 的 BEST_SPEED 或者 BEST_COMPRESSION
- 用于基于多值 Field 排序的 SortedSetSortField 已从 Lucene 的沙箱中移到 Luene 的核心库中。
Lucene 5.0 已不再兼容 Lucene 3.X 系列版本,当打开 3.X 系列版本生成的索引将会引起格式异常。如果要升级到 5.0 版本,最好重建索引或者使用最新的 4.10 相关的索引工具更新旧的索引。
Lucene 是一个使用 Java 开发的高性能的全文检索引擎,更多关于 Lucene 5.0 的信息,请读者查看其发布公告和其完整改进列表请看 ChangeLog 。此外,基于 Lucene 的 Solr 也更新到了 5.0 版本, 主要在易用性、维护操作、分布式集群等方面进行了改进,读者可以登录其官网了解相关信息。目前,除了Solr 外,还有有众多著名的开源项目基于Lucene 实现,如 Elasticsearch 、 Hibernate Search 、LinkedIn 的 Zoie 。国内外许多公司都在使用 Lucene 或者基于 Lucene 的开源项目来构建全文检索,如 Apache 软件基金会的网站、Eclipse 的帮助子系统等。
感谢郭蕾对本文的审校。
给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。
评论