作者:来自 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、评分)正式版

  • 线性检索器(推进混合搜索)

  • HNSW 的 ACORN-1 性能提升

  • 提前终止如何加速近似 KNN 搜索

我们致力于持续创新,帮助你构建最快的搜索应用。

原文:Elasticsearch sorting just got up to 900x faster - Elasticsearch Labs

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

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

相关文章

Nginx重定向协议冲突解决方案:The plain HTTP request was sent to HTTPS port

问题原因 ​​服务器运行在 HTTPS 模式,但代码却发出了 HTTP 重定向指令,两套协议对不上,浏览器直接报错。​​ 在Java中,常见于response.sendRedirect()方法的使用。该方法默认生成基于HTTP的绝对URL,即便原始请求是…

机器学习如何让智能推荐“更懂你”,助力转化率飞跃?

机器学习如何让智能推荐“更懂你”,助力转化率飞跃? 今天咱聊聊一个电商、内容平台、社交App都离不开的“秘密武器”——智能推荐系统,以及机器学习到底如何帮它提升转化率的。 说白了,转化率就是“点进去买单”的概率。智能推荐做得好,转化率能蹭蹭上涨;做不好,用户滑…

Ruby CGI Session

Ruby CGI Session 引言 CGI(Common Gateway Interface)是一种网络服务器与外部应用程序(如脚本或程序)进行通信的协议。在Ruby语言中,CGI被广泛用于创建动态网页。本文将深入探讨Ruby CGI Session的相关知识&#xf…

从零开始的云计算生活——第二十四天,重起航帆,初见MySQL数据库

一.故事剧情 接下来要进入到一条比较长的路——mysql数据库,之后会用一段时间来学习mySQL数据库的内容,今天先从基础开始介绍mysql数据库。 二.MySQL数据库概述 1.数据库概念 数据库(Database) 简称DB,按照一定格式存储数据的一些文件的…

ES文件管理器v4.4.3(ES文件浏览器)

前言 ES文件管理器(也叫ES文件浏览器)是一款手机上用来看和管理文件的工具。你可以用它像在电脑上一样,把文件整理进不同的文件夹,查找照片、文档、视频都很方便。它还能看到平时看不到的隐藏文件,帮你清理一些没用的…

leetcode:693. 交替位二进制数(数学相关算法题,python3解法)

难度:简单 给定一个正整数,检查它的二进制表示是否总是 0、1 交替出现:换句话说,就是二进制表示中相邻两位的数字永不相同。 示例 1: 输入:n 5 输出:true 解释:5 的二进制表示是&am…

GRU与LSTM之间的联系和区别

前面我们谈到RNN与LSTM之间的关系,而GRU也是循环神经网络中的一种模型,那么它与LSTM有什么区别呢? 接下来我来对GRU(Gated Recurrent Unit)模型进行一次深度解析,重点关注其内部结构、参数以及与LSTM的对比…

2025年数字信号、计算机通信与软件工程国际会议(DSCCSE 2025)

2025年数字信号、计算机通信与软件工程国际会议(DSCCSE 2025) 2025 International Conference on Digital Signal, Computer Communication, and Software Engineering 一、大会信息 会议简称:DSCCSE 2025 大会地点:中国北京 审稿…

北峰智能SDC混合组网通信方案,助力无网络场景高效作业

在自然灾害、公共安全事件或大规模活动应急响应中,专用无线对讲通信因其不受外部网络限制、免去通话费用、无需拨号便可实现即时语音调度的特点,展现出其不可替代的价值。尤其在许多无基础设施的地区,对智能化调度管理的需求并不亚于城市地区…

HarmonyOS应用开发高级认证知识点梳理 (二) 组件交互

以下是 HarmonyOS 应用开发中 ‌组件交互‌ 的核心知识点梳理(高级认证备考重点),涵盖事件传递、状态管理、通信机制及生命周期协同: 一、事件处理机制 基础交互类型‌ (1)点击事件(onClick) 核心要点‌…

【SQL优化案例】索引创建不合理导致SQL消耗大量CPU资源

#隐式转换 第一章 适用环境 oracle 11glinux 6.9 第二章 Top SQL概况 下面列出我们发现的特定模块中Top SQL的相关情况: SQL_ID 模块 SQL类型 主要问题 fnc58puaqkd1n 无 select 索引创建不合理,导致全索引扫描,产生了大量逻辑读 …

autoas/as 工程的RTE静态消息总线实现与端口数据交换机制详解

0. 概述 autoas/as 工程的RTE(Runtime Environment)通过自动生成C代码,将各SWC(软件组件)之间的数据通信全部静态化、结构化,实现了类似“静态消息总线”的通信模型。所有端口的数据交换都必须经过RTE接口…

【机器学习第四期(Python)】LightGBM 方法原理详解

LightGBM 概述 一、LightGBM 简介二、LightGBM 原理详解⚙️ 核心原理🧠 LightGBM 的主要特点 三、LightGBM 实现步骤(Python)🧪 可调参数推荐完整案例代码(回归任务 可视化) 参考 LightGBM 是由微软开源的…

时序数据库IoTDB监控指标采集与可视化指南

一、概述 本文以时序数据库IoTDB V1.0.1版本为例,介绍如何通过Prometheus采集Apache IoTDB的监控指标,并使用Grafana进行可视化。 二、Prometheus聚合运算符 Prometheus支持多种聚合运算符,用于在时间序列数据上进行聚合操作。以下是一些常…

React安装使用教程

一、React 简介 React 是由 Facebook 开发和维护的一个用于构建用户界面的 JavaScript 库,适用于构建复杂的单页应用(SPA)。它采用组件化、虚拟 DOM 和声明式编程等理念,已成为前端开发的主流选择。 二、React 安装方式 2.1 使用…

.NET MAUI跨平台串口通讯方案

文章目录 MAUI项目架构设计平台特定实现接口定义Windows平台实现Android平台实现 MAUI主界面实现依赖注入配置相关学习资源.NET MAUI开发移动端开发平台特定实现依赖注入与架构移动应用发布跨平台开发最佳实践性能优化测试与调试开源项目参考 MAUI项目架构设计 #mermaid-svg-OG…

BUUCTF在线评测-练习场-WebCTF习题[MRCTF2020]你传你[特殊字符]呢1-flag获取、解析

解题思路 打开靶场&#xff0c;左边是艾克&#xff0c;右边是诗人&#xff0c;下面有个文件上传按钮 结合题目&#xff0c;是一个文件上传漏洞&#xff0c;一键去世看源码可知是提交按钮&#xff0c;先上传个一句话木马.php试试 <?php eval($_POST[shell]); ?> 被过…

【容器】容器平台初探 - k8s整体架构

目录 K8s总揽 K8s主要组件 组件说明 一、Master组件 二、WokerNode组件 K8s是Kubernetes的简称&#xff0c;它是Google的开源容器集群管理系统&#xff0c;其提供应用部署、维护、扩展机制等功能&#xff0c;利用k8s能很方便地管理跨机器运行容器化的应用。 K8s总揽 K8s主…

C++--继承

文章目录 继承1. 继承的概念及定义1.1 继承的概念1.2 继承的定义1.2.1 定义格式1.2.2 继承方式和访问限定符1.2.3 继承基类成员访问方式的变化1.2.3.1 基类成员访问方式的变化规则1.2.3.2 默认继承方式 1.3 继承类模版 2. 基类和派生类的转化3. 继承中的作用域3.1 隐藏3.2 经典…

无REPOSITORY、TAG的docker悬空镜像究竟是什么?是否可删除?

有时候&#xff0c;使用docker images指令我们可以发现大量的无REPOSITORY、TAG的docker镜像&#xff0c;这些镜像究竟是什么&#xff1f; 它们没有REPOSITORY、TAG名称&#xff0c;没有办法引用&#xff0c;那么它们还有什么用&#xff1f; [rootcdh-100 data]# docker image…