Apache Lucene 10 已发布!Lucene 硬件效率改进及其他改进

作者:来自 Elastic Adrien Grand

Apache Lucene 10 刚刚发布,重点关注硬件效率!查看主要版本亮点。

Apache Lucene 10 终于发布了!自 Lucene 9.0(于 2021 年 12 月发布,距今已有近 3 年)以来,已有 185 位独立贡献者提交了 2,000 多次提交,发生了很多事情。公平地说,这些更改中的大多数都是在 9.x 次要版本中提供的。但是,最雄心勃勃的更改通常需要一个主要版本,例如在 Lucene 6.0 中引入多维点(multi-dimensional points)、在 8.0 中引入动态修剪(dynamic pruning )或在 9.0 中引入向量搜索(vector search )。在 10.0 中,Lucene 的重点领域一直是硬件效率,即让 Lucene 更好地利用现代硬件。让我带你了解主要的版本亮点:

更多的搜索并行性

多年以来,Lucene 一直能够并行化搜索执行,方法是创建段组,在不同的线程中搜索每个组,最后合并结果。这种方法的一个缺点是它将索引几何结构(索引如何组织成段)与搜索并行性结合在一起。例如,强制合并(force-merged)为单个段的索引不再能够利用多个执行线程进行搜索。现代 CPU 通常有数十个核心,这非常令人失望!

为了克服这一限制,Lucene 的查询评估逻辑现在允许将索引拆分为逻辑分区,这些分区不再需要与段对齐。例如,强制合并为单个段的索引仍然可以被切分为 10 个逻辑分区,每个分区包含该段文档的十分之一。

这一变化将有助于提高搜索并行性,尤其是在具有许多核心的机器上和/或最高层上只有少数段的索引上。此更改不适用于创建 Scorer 成本较高的查询 - 例如范围查询和前缀查询,但我们希望在即将发布的次要版本中解除此限制。

更好的 I/O 并行性

到目前为止,Lucene 将使用同步 I/O,并且每个搜索线程一次最多执行一个 I/O 操作。对于大大超过页面缓存大小的索引,这可能导致查询受限于 I/O 延迟,而主机仍远未达到 IOPS 的最大值。令人沮丧!

为了解决这个问题,Lucene 的 Directory 抽象引入了一个新的 IndexInput#prefetch API,让操作系统知道它即将读取的文件区域。然后,操作系统可以在单个 OS 线程内并行检索与这些区域相交的页面。例如,带有 TermQuery 子句的 BooleanQuery 现在将在单个执行线程内并行执行术语字典查找的 I/O,然后并行检索每个帖子列表的前几页。MMapDirectory 是 Lucene 的默认 Directory 实现,它使用 Linux 和 Mac OS 上的 madvise 的 MADV_WILLNEED 建议实现此 prefetch API。

我们对这一变化感到非常兴奋,它已经被证明有助于快速本地 NVMe 磁盘,并且将进一步帮助具有更差延迟同时保持良好并行性的存储系统,例如网络附加磁盘(GCP 持久存储、Amazon EBS、Azure 托管磁盘)甚至对象存储(GCP 云存储、Amazon S3、Azure blob 存储)。

通过稀疏索引提高 CPU 效率和存储效率

Lucene 10 引入了对稀疏索引的支持,在其他数据存储中有时称为主键索引(primary-key indexing)或区域索引(zone indexing)。这个想法很简单:如果你的数据按排序顺序存储在磁盘上,那么你可以将其组织成块,记录每个块的最小值和最大值,你的查询将能够利用这些信息跳过与查询不相交的块,或完全匹配查询包含的块。只有与查询部分相交的块才需要进一步检查,挑战在于选择最佳索引排序以最小化此类块的数量。

Lucene 的稀疏索引目前通过 4 个级别的块实现,每个级别分别具有 4k、32k、256k 和 2M 文档。

如果做得正确,这种索引形式非常节省空间(每个块只有几个字节)和 CPU 效率(只需几个 CPU 指令就可以决定数千个文档是否匹配)。缺点是索引只能以单一顺序存储在磁盘上,因此并非所有字段都能从中受益。通常,索引会根据数据的主要维度进行排序。例如,对于包含产品的电子商务目录,这些维度可能是产品的类别和品牌。

稀疏索引


数据库中的稀疏索引是一个文件,其中包含数据文件中每个块的键和指针对。此文件中的每个键都与指向排序数据文件中块的特定指针相关联。在具有重复键的聚类索引中,稀疏索引指向每个块中的最低搜索键。

结论

请注意,9.x 次要版本中还发布了一些与硬件效率相关的更改。特别值得强调的是:

  • Lucene 现在在比较向量和解码帖子时利用显式向量化,
  • Lucene 的并发搜索执行逻辑 performs work stealing 以减少分支任务的开销。,
  • Lucene 的帖子格式已更新为具有更连续的访问模式,
  • Lucene 现在在打开具有随机访问模式的文件时传递 MADV_RANDOM 建议。

我们对这个新的 Lucene 版本和硬件效率重点感到非常兴奋。如果你想了解有关这些改进的更多信息,我们将在未来几周内撰写有关它们的更详细的博客。敬请期待。

准备好自己尝试一下了吗?开始免费试用。

Elasticsearch 和 Lucene 提供强大的向量数据库和搜索功能。深入了解我们的示例笔记本以了解更多信息

原文:Apache Lucene 10 release highlights - hardware efficiency & more — Search Labs

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

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

相关文章

C++20中头文件source_location的使用

<source_location>是C20中新增加的头文件&#xff0c;此头文件是utility库的一部分。 主要内容为类std::source_location&#xff1a;表示有关源代码的某些信息&#xff0c;例如文件名(__FILE__)、行号(__LINE__)和函数名(__func__)。 以下为测试代码&#xff1a; names…

Redis 高可用:从主从到集群的全面解析

目录 一、主从复制 (基础)1. 同步复制a. 全量数据同步b. 增量数据同步c. 可能带来的数据不一致 2. 环形缓冲区a. 动态调整槽位 3. runid4. 主从复制解决单点故障a. 单点故障b. 可用性问题 5. 注意事项a. Replica 主动向 Master 建立连接b. Replica 主动向 Master 拉取数据 二、…

Vue+TypeScript+SpringBoot的WebSocket基础教学

成品图&#xff1a; 对WebSocket的理解&#xff08;在使用之前建议先了解Tcp&#xff0c;三次握手&#xff0c;四次挥手 &#xff09;&#xff1a; 首先页面与WebSocket建立连接、向WebSocket发送信息、后端WebSocket向所有连接上WebSoket的客户端发送当前信息。 推荐浏览网站…

【网络原理】HTTP协议

目录 前言 一.什么是HTTP HTTP报文格式 HTTP的请求格式 1.首行 2.请求头&#xff08;header&#xff09; 3.空行 4.正文&#xff08;body&#xff09; HTTP的响应格式 1.首行 2.响应头 3.空行 4.正文&#xff08;body&#xff09; 首行中的方法 GET和POST的区别 …

linux中级wed服务器(https搭建加密服务器)

一。非对称加密算法&#xff1a; 公钥&#xff1a;公共密钥&#xff0c;开放 私钥&#xff1a;私有密钥&#xff0c;保密 1.发送方用自己的公钥加密&#xff0c;接受方用发送方的私钥解密&#xff1a;不可行 2.发送方用接受方的公钥加密&#xff0c;接受方用自己的私钥解密…

基于yolov10的驾驶员抽烟打电话安全带检测系统python源码+pytorch模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv10的驾驶员抽烟、打电话、安全带检测系统是一种先进的驾驶行为监测系统。该系统利用YOLOv10算法的高效性和准确性&#xff0c;实现对驾驶员行为的实时检测与识别。 YOLOv10是一种最新的实时物体检测模型&#xff0c;其通过深度学习技术&#xff0c;如卷…

spark统一内存模型 详解

Apache Spark 是一个用于大规模数据处理的分布式计算框架&#xff0c;它支持多种处理模型&#xff08;如批处理、流处理、SQL、机器学习等&#xff09;。为了高效地在分布式环境中处理这些多样化的工作负载&#xff0c;Spark 在 2.x 版本后引入了统一内存管理模型&#xff0c;以…

Mycat2安装配置

安装配置 安装 目前Mycat2下载地址已经不可访问&#xff0c;安装包可从参考资料[1]获取 下载后解压zip文件&#xff0c;将jar放在lib目录下 编辑配置文件 编辑conf文件夹下的prototypeDs.datasource.json 更改数据库相关信息 启动 windows环境下启动Mycat 以管理员身份运行…

Linux重点yum源配置

1.配置在线源 2.配置本地源 3.安装软件包 4.测试yum源配置 5.卸载软件包

Git 完整教程:版本管理、分支操作与远程仓库解析

文章目录 一、引言二、Git原理三、.git目录四、版本回退以及撤销修改五、Git远程控制1、创建仓库2、克隆/下载远程仓库到本地的方法3、本地仓库的修改推送到远程仓库4、拉取远程仓库的修改到本地仓库5、操作标签 六、Git分支1、分支操作&#xff08;创建、删除、合并&#xff0…

九种排序,一次满足

我们在算法题进行练习提升时&#xff0c;经常会看到题目要求数据从大到小输出&#xff0c;从小到大输出&#xff0c;前一半从小到大输出&#xff0c;后一半从大到小输出等&#xff0c;那么这时候就需要用到排序算法&#xff0c;通过排序算法将数据按照一定的顺序进行排序。本文…

排序02 Multi-gate Mixture-of-Experts (MMoE)

MMoE: 不一定适合业务场景 输入向量&#xff08;包含四种特征&#xff09;到三个神经网络&#xff08;专家&#xff09;&#xff0c;不共享参数。实践中超参数专家神经网络个数需要调&#xff0c;会尝试4个或者8个专家。 左边另一个神经网络softmax输出的向量&#xff0c;三个…

element-plus 官方表格排序问题

element-plus 官方API 默认表格排序存在问题&#xff0c;一个list 被多组排序 修改后&#xff1a; 注意点&#xff1a; 这里一定要使用 sortable"custom"&#xff0c;自定义 sort-change 方法 使用 sortable true 的情况排序会冲突&#xff0c;出现莫名奇妙的问题…

Oracle SQL练习题,从小白到入门 - 上

从事DBA以来&#xff0c;越来越认识到自己SQL水平不足&#xff0c;想想sql语句还停留在大二寒假学习的黑马的Mysql《Mysql 十天精通》基础篇进阶篇&#xff0c;将近100集一天就学完了&#xff0c;黑马yyds。 再后来&#xff0c;做项目用Spring的MyBatis是真的香&#xff0c;练…

string类的学习(上)

string类与我们再C语言中接触到的字符串数据相似&#xff0c;但是做出了一些重大的提升&#xff0c;封装为类&#xff0c;实现了总多的接口&#xff0c;丰富了其功能&#xff0c;为简化了字符串的使用&#xff0c;那现在我们就开始深入学习string类吧。 1.什么事string类 C语言…

Java项目:155 springboot酒店管理系统(含论文+ppt+开题报告+说明文档)

作者主页&#xff1a;源码空间codegym 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 ​ 后台&#xff1a; 1.登录&#xff1a;输入账号、密码&#xff0c;即可登录。 2.套房管理&#xff1a;可对房间房型进行管理。 3.入住管…

elk部署安装

elk部署 前提准备1、elasticsearch2、kibana3、logstash 前提准备 1、提前装好docker docker-compose相关命令 2、替换docker仓库地址国内镜像源 cd /etc/docker vi daemon.json # 替换内容 {"registry-mirrors": [ "https://docker.1panel.dev", "ht…

L1练习-鸢尾花数据集处理(分类/聚类)

背景 前文&#xff08;《AI 自学 Lesson1 - Sklearn&#xff08;开源Python机器学习包&#xff09;》&#xff09;以鸢尾花数据集的处理为例&#xff0c;本文将完善其代码&#xff0c;在使用 sklearn 的部分工具包基础上&#xff0c;增加部分数据预处理、数据分析和数据可视化…

FL Studio 2024 发布,添加 FL Cloud 插件、AI 等功能

作为今年最受期待的音乐制作 DAW 更新之一&#xff0c;FL Studio 2024发布引入了新功能&#xff0c;同时采用了新的命名方式&#xff0c;从现在起将把发布年份纳入其名称中。DAW 的新增功能包括在 FL Cloud 中添加插件、AI 驱动的音乐创作工具和 FL Studio 的新效果。 FL Clou…

Java 解决阿里云OSS服务器私有权限图片通过URL无法预览的问题

简单描述一下此场景的业务: 由于系统中需要将上传的图片在系统中展示(private私有权限不能直接通过url直接展示),不想通过先下载下来然后以流的形式返回给前台展示这种方法很不友好,毕竟现在前台展示方式都是通过图片URL进行展示,所以就上官网查看API文档,果然找到了解决…