当前位置: 首页 > news >正文

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.lryc.cn/news/462650.html

相关文章:

  • 【SQL】SQL查询语句
  • AGI 之 【Dify】 之 使用 Docker 在 Windows 端本地部署 Dify 大语言模型(LLM)应用开发平台
  • 机器学习摘下诺奖桂冠
  • 营销邮件软件:提升邮件营销效率必备工具!
  • 鸿蒙开发 四十五 鸿蒙状态管理(嵌套对象界面更新)
  • 第 6 章:vue-router
  • PaddleOCR模型转换、部署全流程(Ubuntu系统)_随记2
  • Tableau 2024.3 发布!表格可视化项扩展、空间参数和 Cloud 管理器等,助力企业大规模分析
  • 即时通讯增加kafka渠道
  • 建造者模式和工厂模式的区别
  • GEE数据集——ERA5-陆地每日汇总--ECMWF气候再分析数据集
  • Spring Boot 中的 @RequestMapping 和 Spring 中的 @RequestMapping 有什么区别?
  • PROFINET开发或EtherNet/IP开发嵌入式归一板有用于工业称重秤
  • 【Kafka】Kafka源码解析之producer过程解读
  • 深度学习笔记20_数据增强
  • 模板变量与php变量对比做判断
  • C语言 | Leetcode C语言题解之第485题最大连续1的个数
  • C语言复习概要(六)
  • PyQt 入门教程(2)搭建开发环境
  • Flink Kubernetes Operator
  • 【最新华为OD机试E卷-支持在线评测】字符统计及重排(100分)多语言题解-(Python/C/JavaScript/Java/Cpp)
  • springboot使用GDAL获取tif文件的缩略图并转为base64
  • Pytorch——pip下载安装pytorch慢的解决办法
  • uniapp微信小程序调用百度OCR
  • Vue3+TS项目---实用的复杂类型定义总结
  • 尚硅谷rabbitmq2024 工作模式路由篇 第11节 答疑
  • HTTP vs WebSocket
  • R语言医学数据分析实践-数据读写
  • JavaWeb环境下Spring Boot在线考试系统的优化策略
  • ETL技术在金蝶云星空与旺店通WMS集成中的应用