Apache Lucene 5.0.0即将发布!

终于,在一系列强大的4.x功能(最近是4.10.2)发布之后,我们终于在努力开发另一个主要的Apache Lucene版本!

没有确切时间的承诺(完成时就完成了!),但是我们已经有一个自愿发布经理 (谢谢您,Anshum!)。

Lucene的一个主要版本意味着所有不推荐使用的API(从4.10.x版本开始)都将被删除,不再支持3.x索引,同时仍支持众多4.x索引格式以实现向后兼容,并且4.10.x分支成为我们的仅修正错误的发行系列(无新功能,无API更改)。

5.0.0已经包含了许多激动人心的更改,我将在下面进行描述,并且随着正在进行的积极开发它们仍在不断发展。

增强索引安全性

5.0.0的许多更改都集中在提供更强大的保护以防止索引损坏。

所有的文件访问现在使用 Java的API的NIO.2 ,给我们更好的错误处理(例如, Files.delete返回一个有意义的异常)与原子重命名沿更安全的提交 ,减少了狰狞的风险“整个指数走了”之类的错误此doozie 。

Lucene的复制模块以及在Lucene之上的分布式服务器(例如Elasticsearch或Solr )必须将索引文件从一个位置复制到另一个位置。 他们这样做是出于备份目的(例如, 快照和还原 ),从一个节点到另一个节点的迁移或恢复分片或添加新副本时的目的。 这样的复制器会尝试增量复制,因此,如果存在相同的文件名,且具有相同的长度和校验和,则不会再次复制该文件。

不幸的是,这些层有时会有细微的错误(它们很复杂!)。 由于校验和 (在4.8.0中添加),Lucene已经检测到复制器在复制时是否引起了任何位翻转,这表明Elasticsearch使用的压缩库中存在一个长期存在的令人讨厌的错误 。

在5.0.0版本中,我们可以更进一步,现在通过为每个段和提交分配唯一的ID ( segments_N文件)来检测整个文件是否复制到错误的文件名。 现在,每个索引文件都在其标头中记录段ID ,然后在打开索引时对这些ID进行交叉检查。

新的Lucene50Codec还包括进一步的索引损坏检测。

甚至CorruptIndexException本身也得到了改进! 现在,它将始终引用检测到损坏的文件或资源,因为现在这是其构造函数的必需参数。 当更高级别检测到损坏(例如,字段信息文件中的字段编号错误)时,产生的CorruptIndexException现在将指出文件中是否还存在校验和不匹配,从而有助于缩小损坏的可能来源。

最后,在合并期间, IndexWriter现在始终在合并之前检查传入的段是否损坏。 这可能意味着,升级到5.0.0后,合并可能会发现旧版4.x索引中长期存在的潜在损坏。

减少堆使用

5.0.0还包括一些更改,以减少索引和搜索期间的堆使用。

如果您的索引具有1B文档,则在4.10.2缓存单个基于FixedBitSet的筛选器将花费不小的125 MB堆空间! 但是在5.0.0版本中,Lucene现在支持可随机写和可扩展的稀疏位集( RoaringDocIdSetSparseFixedBitSet ),因此所需的堆与设置的位成比例,而不是索引中存在的文档总数。 这些位集还大大简化了MultiTermQuery的重写方式(不再需要CONSTANT_SCORE_AUTO_REWRITE_METHOD ),并且它们提供了比FixedBitSet的线性扫描更快的高级实现。 最后,它们提供了更准确的cost()实现,使Lucene可以更好地选择在查询时如何驱动交叉路口。

新的Lucene50Codec 合并 IndexWriter期间的堆使用量也要低得多 ,因为合并的段的doc值和规范不再完全加载到所有字段的堆中。 现在将它们加载到当前正在合并的一个字段中,然后删除。

现在,默认的规范格式在适当时使用稀疏编码,因此为许多稀疏字段启用规范的索引将在搜索时看到所需堆的大量减少。

解释堆使用的API

如果仍然发现Lucene使用的堆多于预期,则5.0.0有一个新的API可打印树结构 ,该结构显示递归分解哪些部分正在使用多少堆。 这类似于Lucene的explain API ,用于了解文档为什么具有一定的相关性得分,但适用于堆使用。

它产生如下输出:

_cz(5.0.0):C8330469: 28MB postings [...]: 5.2MB ... field 'latitude' [...]: 678.5KB term index [FST(nodes=6679, ...)]: 678.3KB

与查看凝视Java堆转储相比,这是查看堆中正在消耗什么的更快的方法。

进一步的变化

附加的5.0.0更改很长; 这里是其中的一些:

  • 旧的实验性发帖格式( Sep/Fixed/VariableIntPostingsFormat )已删除。 PulsingPostingsFormat也已删除,因为默认的发布格式已经产生了唯一的条件。
  • FieldCache走了(移动到专用UninvertingReadermisc模块)。 这意味着当您打算对字段进行排序时,应使用doc值对该字段建立索引,这比FieldCache快得多,堆消耗更少。
  • TokenizerAnalyzer 不再需要在初始状态下使用Reader
  • 现在, NormsFormat获得了自己专用的NormsConsumer/Producer
  • FieldInfo简化(Lucene的“低模式”):不再需要normType (它始终是DocValuesType.NUMERIC ),不再需要isIndexed (只需检查IndexOptions
  • 复合文件的处理更为简单,现在处于编解码器的控制之下。
  • 用于对多值字段进行排序的SortedSetSortField从沙箱提升为Lucene的核心
  • PostingsFormat现在写帖子的时候,就像DOC值使用“拉” API。 此功能非常强大,因为您可以采用发布格式进行操作,这些操作需要对发布进行一次以上的遍历操作,例如遍历每个术语的所有发布以决定应使用哪种压缩格式。
  • 诸如IndexWriterConfig和分析组件之类的类的初始化不再需要版本。

我在这里描述的更改只是我们今天针对5.0.0版本进行的排列的快照。 5.0.0仍在积极开发中(欢迎打补丁!),因此该列表将在实际发行完成时更改。

翻译自: https://www.javacodegeeks.com/2014/11/apache-lucene-5-0-0-is-coming.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/361644.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从零开始学习前端开发 — 15、CSS3过渡、动画

一、css3过渡 语法: transition: 过渡属性 过渡时间 延迟时间 过渡方式; 1.过渡属性(transition-property) 取值:all 所有发生变化的css属性都添加过渡 eg: transition: all 1s; ident 指定要过渡的css属性列表 eg: transition:border-radius 1s,back…

CentOS6.4 Install FTP

目录 安装参考传输模式遇到无法显示远程文件夹报错安装参考 https://www.cnblogs.com/walblog/articles/7890226.html 传输模式 主动模式被动模式遇到无法显示远程文件夹报错 点击属性设置: 搞定。 转载于:https://www.cnblogs.com/mysticbinary/articles/11271647.…

windowsphone7高级编程中提到的地址

1、综合性技术论坛,包括windowsphone,.net,iphone,android等,网址:http://p2p.wrox.com 2、windowsphone7高级编程作者Nick Randolph发表博客的网站,网址:http://www.christec.co.nz/, 书中代码下载地址&am…

用于单元测试的JUnit教程–最终指南(PDF下载)

编者注: 我们在Java Code Geeks上提供了许多JUnit教程,例如JUnit入门示例 , 使用断言和注释的 JUnit 示例 , JUnit注释示例等。 但是,为了方便读者,我们希望将所有JUnit功能收集在一份详细的指南中。 我们…

EF 拉姆达 linq if else (整理)

首先想到:结果不正确! var data0 db.T_Plants2; //这里加.AsQueryable()if (locationType 1){.Where(d > d.NaturalEcosystem true);}else{.Where(d > d.BuiltUpArea true);}.Select(d > new{AnimalID d.PlantID,Species d.Species,}).To…

从零开始学习前端开发 — 7、CSS宽高自适应

一、宽度自适应 语法:width:100%; 注: a)块状元素的默认宽度为100% b) 当给元素设置宽度为100%时,继承父元素的宽度 c) 通常使用宽度自适应实现通栏效果 二、高度自适应 语法:height:auto;(等同于不给元…

用jOOQ用Java编写SQL

jOOQ是“数据库优先”的类型安全的SQL API,使您可以直观地用Java编写SQL,就像Java编译器本身支持SQL语言一样。 所有数据库模式,表,列,过程和其他对象均作为Java对象提供,可以直接在jOOQ SQL API中使用。 …

Springboot + Mybatis + Ehcache

最近在做一个项目,为处理并发性较差的问题,使用了Mybatis二级缓存 但在多表联合查询的情况下,Mybatis二级缓存是存在着数据脏读的问题的 两天就是在想办法解决这个数据脏读的问题 考虑到简易性、性能、兼容性、可扩展性,我选择了s…

Autowired注解

package com.how2java.pojo;import org.springframework.beans.factory.annotation.Autowired;public class Product {private int id;private String name;Autowired// 等价于 Resource(name"c")private Category category;public int getId() {return id;}public …

UVa 100

今天也算是练习了一下记忆化搜索&#xff0c;这道题也包含很多值得注意的地方 1、 输入的两个数不一定前者比后者大 2、 变换的过程中可能会超出int范围 3、 为了不超时可以作下预处理 #include<iostream>#include<cstring>#include<cstdio>using namesp…

jquery.cookie.js 使用方法

Cookies 定义&#xff1a;让网站服务器把少量数据储存到客户端的硬盘或内存&#xff0c;从客户端的硬盘读取数据的一种技术&#xff1b; 下载与引入:jquery.cookie.js基于jquery&#xff1b;先引入jquery&#xff0c;再引入&#xff1a;jquery.cookie.js&#xff1b;下载&…

BizTalk开发系列(十二) Schema设计之Group与Order

更多内容请查看&#xff1a;BizTalk动手实验系列目录 BizTalk 开发系列 开发BizTalk项目的时候会先约定各系统之间往来的消息格式. 由于BizTalk内部唯一使用XML文档。因此消息的格式为XML Schema(XML Schema 用于描述 XML 文档的结构)。虽然BizTalk提供了对于XML消息的验证功能…

深入理解JavaScript系列(32):设计模式之观察者模式

介绍 观察者模式又叫发布订阅模式&#xff08;Publish/Subscribe&#xff09;&#xff0c;它定义了一种一对多的关系&#xff0c;让多个观察者对象同时监听某一个主题对象&#xff0c;这个主题对象的状态发生变化时就会通知所有的观察者对象&#xff0c;使得它们能够自动更新自…

JAXB众所周知的秘密

介绍 我重新发现了Java提供给大众的库。 当我第一次阅读该规范时&#xff0c;我很困惑&#xff0c;以为我需要所有这些特殊工具来实现。 我最近发现&#xff0c;只需要一些注释和一个POJO。 杰克斯 JAXB代表XML绑定的Java体系结构。 这种体系结构允许开发人员将来自类的数据转…

题解:CF1914E-Game with Marbles

题解&#xff1a;CF1914E-Game with Marbles 事先说明一下&#xff0c;本题解不讲解简单数据范围的算法&#xff0c;因为复杂数据范围的就很简单。 这道题的大体意思是这样的&#xff1a;小A有颜色为i(i1~n)的小球a[i]个&#xff0c;小B有颜色为i(i1~n)的小球b[i]个。现在他们…

【canvas系列】canvas实现“ 简单的Amaziograph效果”--画对称图【强迫症福利】

标题很难引人入胜&#xff0c;先放个效果图好了 如果图片吸引不了你&#xff0c;那我觉得也就没啥看的了。 demo链接&#xff1a; https://win7killer.github.io/demo_set/html_demo/canvas/can_demo/draw_roll_2.html ************************************************* 上…

原生类型的autoboxing和auto-unboxing

原生类型的autoboxing和auto-unboxing 我们知道&#xff0c;在Java中&#xff0c;int,long等原生类型不是一个继承自Object的类&#xff0c;所以相应的&#xff0c;有很多操作我们都不能利用原生类型操作&#xff0c;比如想要把一个整数放入到一个集合中&#xff0c;我们必须首…

jquery ui datepicker 只能选今天以后的日期

$("input[namebegintime],input[nameendtime],input[nameArrivedate]").datepicker({dateFormat:"yy-mm-dd",minDate: new Date()}); 转载于:https://www.cnblogs.com/y0umer/archive/2012/03/02/3839264.html

全部关于测试–第2部分

这是有关测试系列的第二篇文章。 在第一部分中&#xff0c;我解释了在进行测试开发时需要具备的心态。 或者&#xff0c;换句话说&#xff0c;开发可测试的代码。 在这一部分中&#xff0c;我将介绍一些测试方法的技术。 我将描述的技术可以看作是如何将思维定势转化为行动。 …

简化软件操作,提升用户体验

虽然自己一直都是做网站开发的&#xff0c;没做过什么软件开发&#xff0c;但使用过的软件也不算少。渐渐的发现有些软件真的功能强大&#xff0c;操作性太复杂&#xff0c;于是该软件真的变成了所谓的专业软件&#xff0c;只有经过专业培训的人才能使用。问题是如果不是有很特…