Apache Lucene 7.0即将发布!

Apache Lucene项目可能会在几个月后发布其下一个主要版本7.0!

请记住,Lucene开发人员通常会努力为下一个非主要(功能)发行版移植新功能,而即将发布的6.5已经有了很多重大更改 ,因此新的主要发行版令人兴奋,因为这意味着仅7.0的功能,我我们现在描述的是那些我们认为无法在6.5下移植的特别大的变量。

当然,在每个主要版本中,我们还会做更多平凡的事情,例如删除不推荐使用的6.x API,并放弃对旧索引的支持(​​使用Lucene 5.x或更早版本编写)。

这只是7.0新功能的一部分。 有关完整列表的信息, 请参见后面的CHANGES.txt的7.0.0部分 。

Doc值作为迭代器

7.0中最大的变化是将文档值从随机访问API更改为限制性更强的迭代器API 。

Doc值是Lucene在所有文档中按列跨步的数字,按文档排序或二进制的字段存储。 它们可用于保存评分信号,例如单字节(默认情况下)文档长度编码或与应用程序相关的信号,或用于排序,构面或分组,甚至是一些查询中可能用于范围过滤的数字字段。 他们的列跨步存储意味着跨文档访问一个字段的所有值是有效的,而行跨步存储用于存储单个字段的所有字段值。

长期以来,帖子是通过迭代器消耗的,因此,这是相对自然的更改,并且两者共享相同的基类,
DocIdSetIterator ,以单步执行或搜索每次DocIdSetIterator

最初死记硬背地切换到迭代器API的过程实际上只是一次管道交换,并且比随后的所有对用户有影响的改进(由于限制性更强的API)而引起的兴趣要小:

  • 7.0编解码器现在可以稀疏地编码稀疏的doc值和长度归一化因子(“范数”)
  • 离群值不再占用过多空间
  • 我们基于文档值的查询利用了新的API
  • 现在,在稀疏情况下, 顶级的仅浏览的构面计数和查询中命中的构面计数都更快
  • 新的advanceExact方法可实现更有效的跳过

通过这些更改,您最终只需为您实际使用的文档值付费,包括索引大小,索引性能等。这与索引的其他部分(如发布,存储的字段,术语向量等)相同,并且意味着具有稀疏doc值的用户不再会花费不合理的时间进行合并或合并时索引异常庞大 。

我们基于NYC Trip Data语料库的 夜间稀疏基准测试表明,上述每项更改(以及更多!)都取得了令人印象深刻的收益。

再见索引时间的提升

现在已弃用了索引时间提升功能,它使您可以提高特定文档相对于其他文档的先验得分,该功能已在7.0版中删除 。

这一直是一个脆弱的功能:它与字段的长度一起被编码为一个字节值,因此精度很低。 此外,现在可以直接将自定义增强功能写入自己的doc值字段,并使用函数查询在搜索时应用增强功能。 最后,随着索引时间的增加, 长度编码更加精确 ,尤其是前九个长度值(1到9)是不同的。

查询计分更简单

BooleanQuery长期以来一直暴露一种令人困惑的评分功能,称为协调因子 ( coord ),以奖励包含更高百分比的搜索字词的匹配。 但是,只有在对TF / IDF之类的术语具有“弱”饱和度的评分模型时,才需要使用此技巧,以使文档中单个术语的多次出现比从查询中添加另一个术语的一次出现更为强大。 由于这是特定于一个评分模型TFIDFSimilarity ,并且由于Lucene现在默认已切换到更好的Okapi BM25评分模型,因此我们现在已从 BooleanQuerySimilarity 完全删除了7.0中的协调因子 。

同样,评分的查询规范化阶段将被删除 。 此阶段尝试使不同查询和索引之间的得分均等,以使它们具有更高的可比性,但未更改命中的排序顺序,并且也是TF / IDF特有的。

通过这些评分简化, 当相同的子条款出现不同的Occur约束时 , BooleanQuery现在可以进行更具进取性的查询优化,这以前是不可能的,因为分数会发生变化。

经典查询解析器不再在空白处拆分

Lucene原来的查询解析器现在称为“经典”,始终将传入的查询文本预分割为空白,然后将这些单个标记分别发送给查询时间分析器。 这意味着多令牌过滤器(例如SynonymGraphFilterShingleFilter )将不起作用。

例如,如果用户要求“拒绝服务攻击”,而您将同义词“拒绝服务”映射到DOS,则经典查询解析器将分别分析“拒绝”,“ of”和“服务”,因此您的同义词将永不匹配。

我们已经在查询解析器中添加了一个选项,该选项不对空格进行预分割,但对于6.x版本保留默认值,以保持向后兼容性。 最后,在7.0版中, 我们修复了该默认设置,以便分析人员可以一次看到多个令牌,并且同义词将起作用。

更多东西

从7.0开始,Lucene将(最终!) 记录到索引元数据中,Lucene版本最初是使用该版本创建它的 。 这些知识可以帮助我们实现将来的向后兼容性。

有限状态转换器在Lucene中以多种方式使用,曾经有一个复杂的方法调用pack ,它会占用更多字节,以进一步缩小FST的体积。 但是代码很复杂,很少使用,有时甚至使FST更大,因此我们在7.0中将其删除 。

用于在索引中添加,更新和删除文档的IndexWriter 将不再接受有时由错误的令牌过滤器产生的损坏的令牌偏移 。 偏移量用于突出显示,而断开的偏移量(单个标记的结束偏移量在开始偏移量之前,或者令牌的起始偏移量相对于先前的标记向后偏移)只能破坏搜索时突出显示。 因此,通过此更改,Lucene通过抛出异常来防止在索引时发生此类错误。 为了在用户甚至不知道其分析仪产生损坏的偏移量的情况下简化此过渡,我们还添加了一些令牌过滤器来“校正”偏移量,然后再将其传递给
IndexWriter

Lucene的高级用户经常需要在搜索时为每个段缓存一些自定义的内容,但是用于此目的的API过于庞大,并且可能导致意外的内存泄漏,因此我们已对这些API进行了大修,以减少意外滥用的机会 。

最后,维度点API 现在会预先获取一个字段名称,以提供按字段的点访问 ,从而与doc值API的工作方式匹配。

Lucene的7.0还没有被释放,所以如果你有任何额外的主要释放值得改变想法,你想探索请伸手 !

[我在亚马逊工作,并且本网站上的帖子属于我自己,不一定代表亚马逊的职位]

翻译自: https://www.javacodegeeks.com/2017/03/apache-lucene-7-0-coming-soon.html

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

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

相关文章

windows常用服务命令

windows运行打开服务命令的方法 :在开始-》运行,输入以下命令 gpedit.msc-----组策略 sndrec32-------录音机 Nslookup-------IP地址侦测器 explorer-------打开资源管理器 logoff---------注销命令 tsshutdn-------60秒倒计时关机命令 explorer--…

springmvc 配置 tag lib_Java自学之springMVC:Hello Spring MVC

学习目的:初识SpringMVC,了解SpringMVC的工作原理Part 1新建一个动态web项目,命名为springMVC,在WEB-INF/lib中,添加所需要的jar包。Part 2在WEB-INF下新建一个web.xml。配置一个DispatcherServlet,所有的请…

GoogLeNet

GoogLeNetInception结构的主要思路是怎样用密集成分来近似最优的局部稀疏结构。对上图做以下说明: 1 . 采用不同大小的卷积核意味着不同大小的感受野,最后拼接意味着不同尺度特征的融合; 2 . 之所以卷积核大小采用1、3和5,主要是为…

1. ThreadPoolExecutor的一个常用的构造方法

ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, RejectedExecutionHandler handler) 参数说明&#xff1a; -corePoolSize       线程池中所保存的核心线程数。线程池启动后默…

spring boot 启动卡住_SpringBoot集成的44种启动器,你知道几种?

点击蓝字“程序员考拉”欢迎关注&#xff01;啥是应用启动器&#xff1f;SpringBoot集成了spring的很多模块&#xff0c;比如tomcat、redis等等。你用SpringBoot搭建项目&#xff0c;只需要在pom.xml引入相关的依赖&#xff0c;和在配置文件中简单的配置就可以使用相应模块了。…

junit 经典示例_JUnit4参数化和理论示例

junit 经典示例我始终依靠TestNG将参数传递给测试方法&#xff0c;以便为我的测试或套件提供一些灵活性。 但是&#xff0c;使用JUnit4可以实现相同的灵活性。 要使用它很简单&#xff1a; package com.marco.test;import java.util.Arrays;import java.util.Collection;imp…

Spring+Hibernate+Atomikos集成构建JTA的分布式事务--解决多数据源跨库事务

一、概念 分布式事务 分布式事务是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。简言之&#xff0c;同时操作多个数据库保持事务的统一&#xff0c;达到跨库事务的效果。 JTA JTA&#xff0c;即Java Transaction API&a…

spring el表达式 if else_Spring 获取单例流程(二)

读完这篇文章你将会收获到Spring 中 prototype 类型的 bean 如何做循环依赖检测Spring 中 singleton 类型的 bean 如何做循环依赖检测前言继上一篇文章 Spring 获取单例流程(一) 我们这次继续往下分析一下后面的流程上一篇文章中我们说到&#xff0c;首先我们根据 name 找到其对…

Apache Spark RDD和Java流

几个月前&#xff0c;我很幸运地参加了一些使用Apache Spark的PoC&#xff08;概念验证&#xff09;。 在这里&#xff0c;我有机会使用弹性分布式数据集&#xff08;简称RDD &#xff09;&#xff0c;转换和操作。 几天后&#xff0c;我意识到虽然Apache Spark和JDK是非常不同…

用脚本js把结果转化为固定小数位的形式

function roundTo(base,precision) {var mMath.pow(10,precision);var aMath.round(base * m) / m;return a; } 例如&#xff1a;给定数字n6.3241712&#xff0c;则用roundTo&#xff08;n,0&#xff09;得4&#xff0c;用roundTo(n,7)得到6.3241712转载于:https://www.cnblogs…

存储过程详解

什么是存储过程&#xff1a;存储过程可以说是一个记录集吧&#xff0c;它是由一些T-SQL语句组成的代码块&#xff0c;这些T-SQL语句代码像一个方法一样实现一些功能&#xff08;对单表或多表的增删改查&#xff09;&#xff0c;然后再给这个代码块取一个名字&#xff0c;在用到…

gpu版tensorflow测试

测试程序&#xff1a; import tensorflow as tfwith tf.Session(configtf.ConfigProto(allow_soft_placementTrue, log_device_placementFalse)) as sess:a tf.constant(1)b tf.constant(3)c a bprint(结果是&#xff1a;%d\n 值为&#xff1a;%d % (sess.run(c), sess.ru…

随机森林原理_机器学习(29):随机森林调参实战(信用卡欺诈预测)

点击“机器学习研习社”&#xff0c;“置顶”公众号重磅干货&#xff0c;第一时间送达回复【大礼包】送你机器学习资料与笔记回顾推荐收藏>机器学习文章集合&#xff1a;1-20机器学习(21): Tensorflow Keras手写数字识别机器学习(22): Tensorflow Keras识别猫狗机器学习(23)…

sudo 命令报错的解决方法

尝试着用终端打开Mac的安全权限&#xff08;sudo spctl --master-disable&#xff09;&#xff0c;却显示以下提示&#xff0c;望高手解答。sudo: /etc/sudoers is world writablesudo: no valid sudoers sources found, quittingsudo: unable to initialize policy plugin 解决…

BGR转RGB

原图&#xff1a; 源代码&#xff1a; #codingutf-8#OpenCV读进来的图像,通道顺序为BGR&#xff0c; 而matplotlib的顺序为RGB&#xff0c;因此需要转换 import cv2 import numpy as np from matplotlib import pyplot as pltimg cv2.imread(./test1.jpg) B, G, R cv2.split…

C++ set的一些用法

set也是STL中比较常见的容器。set集合容器实现了红黑树的平衡二叉检索树的数据结构&#xff0c;它会自动调整二叉树的排列&#xff0c;把元素放到适当的位置。set容器所包含的元素的值是唯一的&#xff0c;集合中的元素按一定的顺序排列。 我们构造set集合的目的是为了快速的检…

ide在控制台输入编译命令_快速编译调试 Redis

一&#xff1a;开篇Redis 它是个宝&#xff0c;男女老少都说好。秒杀限流分布式&#xff0c;什么需求都能搞。Redis 主要的用途是分布式缓存&#xff0c;其实不用我多介绍&#xff0c;相信大家都用过Redis。之前也看过不少Redis的书&#xff0c;其中就包括《Redis设计与实现》。…

Java增强枚举的用例

Brian Goetz在消息“ 增强枚举-用例 ”中写道&#xff1a;“我们希望就现在实现的功能[ 增强枚举 ]获得用户反馈。” 他陈述了他的信息的第一个目的&#xff1a;“开始工作&#xff0c;这是一些通用枚举可能有用的典型用例。” 所提供的两个示例中的第一个示例是重构com.sun.to…

图片上传获取名字

Override public ResultResponse<String> uploadImg(MultipartFile file) { String imgUrl null; try { //MultipartFile类中两个方法区别&#xff1a;//getName : 获取表单中文件组件的名字//getOriginalFilename : 获取上传文件的原名 String name file.getOriginalF…

tf.nn.softmax

通过Softmax回归&#xff0c;将logistic的预测二分类的概率的问题推广到了n分类的概率的问题。通过公式 可以看出当月分类的个数变为2时&#xff0c;Softmax回归又退化为logistic回归问题。 下面的几行代码说明一下用法 # -*- coding: utf-8 -*- import tensorflow as tfA […