Elasticsearch 排序性能提升高达 900 倍
作者:来自 Elastic Benjamin Trent, Mayya Sharipova, Chenhui Wang 及 Libby Lin
了解我们如何通过更快的 float / half_float 排序和 integer 排序的延迟优化来加快 Elasticsearch 排序速度。
Elasticsearch 引入了大量新功能,帮助你为你的使用场景构建最佳搜索解决方案。深入了解我们的示例笔记本,开始免费云试用,或立即在本地机器上尝试 Elastic。
Elasticsearch 在字段类型排序速度方面持续优化,9.0.1 版本已加速了 float / half_float 排序。此外,即将发布的 Elasticsearch 9.1 也将带来 integer 排序的显著延迟提升。
这些新的排序优化不仅已应用于 Elastic Cloud Serverless,也将回溯至 Elasticsearch 8.19,让尚未升级到 Elasticsearch 9.x 的用户也能享受排序性能提升。
通过两个不同的基准测试,我们观察到延迟显著改善:
NYC Taxis 的 float 和 half_float 排序:提升 83 倍到 920 倍
Http_logs 的 integer 排序:提升 41 倍到 531 倍
在这里查看我们对 http_logs 的 nightly 基准测试结果(注意:2025 年 5 月新增了排序延迟指标)。
背景
在 2020 年,我们在 Elasticsearch 7.6 中对 long 和 date 字段类型的排序进行了重大优化。例如,按最新时间戳排序检索日志的速度大幅提升。随后在 7.16 版本中,我们引入了 search_after 参数,支持了常见的分页场景。
这一次,我们将同样的优化应用到 integer、short 和 byte 字段类型,以及 float 和 half_float 字段类型。
根据你的数据及其在各个 segment 之间的分布情况,你可能会看到对 integer、short、byte、float 和 half_float 数据类型进行排序查询的速度提升从几倍到数百倍不等。
我们是怎么做到的?
我们没有依赖 index sorting,而是采用了一种新方法:将 BKD(Block k-dimensional)树与 distance 查询结合使用。BKD 树的叶子块具有便于跳过的特性,因为每个块的字段最小值和最大值是可比较的。
结合使用 distance_feature 查询,我们可以在比较过程中快速判断哪些块不具备竞争性,从而跳过这些无效的数据区域,大大节省处理时间。
至于是从全局最小值还是最大值计算距离,取决于排序是升序还是降序。
这也意味着字段必须已建立索引,且不能为 null。
更详细的内容可以参考我们之前关于排序查询优化的博客。
下面是结果……
结果
NYC Taxis 基准测试
在 NYC Taxis 基准测试中(添加了 half_float 类型),性能提升范围为 83 倍到 920 倍(通过旧的 P90 延迟除以新的 P90 延迟计算得出):
从对数尺度的图像上可以直观看到显著的提升:
Http_logs 基准测试
我们使用了开源工具 Rally 中的 http_logs track,采用了此处提供的默认设置。
在 integer 排序优化中,http_logs 基准测试的八种不同使用场景下,性能提升在 41 倍到 531 倍之间(同样通过旧的 P90 延迟除以新的 P90 延迟计算得出)。
同样,即使在对数尺度下,我们也能看到明显的性能提升对比:
根据我们的 nightly 基准测试,integer 排序的性能提升非常显著,结果如下复现:
许多用例都受益于这一性能提升,包括 Observability、Security 和 Search 中的分析仪表盘。更低的延迟也带来了更高效的计算和更低的基础设施成本。
展望 Elasticsearch 9.1
Elastic 9.1 还将包括其他令人兴奋的增强功能,包括但不限于:
- ES|QL 全文搜索(MATCH、QSTR、评分)GA
- 线性检索器 (Advancing Hybrid Search)
- HNSW 的 ACORN-1 性能改进
- 提前终止如何加快 Approximate KNN 搜索速度
我们致力于持续创新,以便您可以构建最快的搜索应用程序。
原文:Elasticsearch sorting just got up to 900x faster - Elasticsearch Labs

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
下一代 2D 图像设计工具「GitHub 热点速览」
长期以来,2D 设计领域似乎已是 Adobe 与 Figma 的天下,层叠的图层、熟悉的工具栏,一切都显得那么顺理成章,却也让不少设计师在创意的边界上感到了些许乏力。当我们以为设计工具的革新只能是小修小补时,开源社区再次扮演了“破局者”的角色。 开源的节点式 2D 图形编辑工具 Graphite,它引入了程序化、非破坏性的节点式编辑流程,为矢量设计带来了前所未有的灵活性和想象空间,在开源社区一经亮相便迅速走红,收获了无数设计师和开发者的关注(周增长 1k+ Star)。与此同时,视频剪辑领域也迎来了基于 Web 的新生力量 OpenCut。极客精神的火花则点燃了 QEMUAppleSilicon 项目,让在非苹果设备上运行 iPhone 系统成为可能。 此外,沉浸式语言学习助手 illa-helper 和极简的打字背单词网站 typing-word 都是学习语言的开源利器。前者通过营造沉浸式语言环境,帮助用户高效提升“输入”能力。后者则利用肌肉记忆强化单词“输出”,两者相辅相成,共同构建了一套完整高效的英语学习闭环。 本文目录 1. 热门开源项目 1.1 节点式 2D 图形编辑工具:G...
- 下一篇
看负载、调资源、控进度!用资源日历掌控全员进度
大家好,我是陈哥。 你的公司肯定遇到过这种情况:每周都花不少时间用来追进度,靠微信问、邮件催、会议对,最后汇总成的Excel报表,往往更新到一半就成了过时数据。 员工忙得脚不沾地,管理层却像蒙眼开车:不知道谁工作轻松、谁工作繁多,更看不清项目链条哪里卡住了。 今天就来聊聊如何用一张资源日历,把这种信息不透明、管理不清晰的难题逐一破解,让团队的人力负载、任务进度、资源调度都变得清晰可控。 点击此处,了解人力资源日历插件。留言【资源日历 30】,获人力资源日历插件。 一、为什么你总摸不透团队的工作情况? 1. 人力负载看不清,进度全靠追着问 你想了解员工任务进度,是不是只能靠反复问“做完了吗”“还差多少”“能不能按时交付”,但其实根本不清楚每个人每天实际干了多久、手头积压了多少活、同时在忙几个项目,更不知道谁的工作已经饱和到快扛不住了。 这种信息对不上的后果就是资源分配不合理,整个团队的效率就在这种混乱中被拖后腿。 2. 调度决策拍脑袋,排期全凭感觉走 真到了要调度人的时候,问题就更明显了。 突然来个急活,只能在工作群里喊一嗓子“谁现在有空”,看谁回复快就先把活派给谁,或者看谁最近加班少就...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS关闭SELinux安全模块
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2配置默认Tomcat设置,开启更多高级功能