ES|QL:Elasticsearch的 新一代查询语言

news2025/1/15 22:40:50

作者:李捷

学会选择很难。学会正确选择更难。而在一个充满无限可能的世界里学会正确选择则更难,也许是太难了。” 巴里-施瓦茨(Barry Schwartz)在《选择的悖论--多就是少》(The Paradox of Choice -More is Less)一书中的一段话概括了为什么灵活性和可定制性过高会让用户不知所措。现代生活中的大量选择可能会导致瘫痪和不满,而不是我们所期望的自由和幸福。多年来,我们在 _search API 中添加了更多的功能和特性,并提供了一个非常灵活和高度可定制的数据搜索平台。但在某些时候,这也是 Elasticsearch 不再像以前那样简单,尤其是对于那些刚刚起步的人来说

随着 Elasticsearch 8.11 版本的即将推出,我们非常高兴地宣布,我们将迎来一个全新的查询语言 ES|QL (Elasticsearch Query Language 的简称)。ES|QL 是一种更加一致、简洁、实用、高效的语言,旨在解决用户在使用 Elasticsearch 时面临的复杂性问题。这是一个里程碑式的发布,我们深知这将改变数据分析的方式,因此我们致力于提供最好的体验。新的 ES|QL 查询语言和引擎 (_query API) 将会替代原有的语言和聚合引擎 (_search API),成为大多数场景下的默认选择,并且将会有大幅的性能提升。

因此,在本博文以及接下来的系列文章中,我们将会带领大家提前预览和体验 ES|QL,这个 Elastic 在数年前就开始秘密开发的杀手级功能。这是一个重要的更新,我们也将会持续提供有关 ES|QL 的相关信息,以确保您可以尽快掌握这个新的功能。

Why ES|QL

Elasticsearch 是一个分布式、非关系型、半结构化、带有时间维度的强大数据平台,支持全文检索、聚合分析、机器学习等功能。在 Elasticsearch 的历史上,曾经诞生过多种语言,如 DSL、KQL、EQL、Lucene、SQL 等,这些语言为 Elasticsearch 的用户在不同的场景下提供了多样的查询能力。

语言

全称

说明

DSL

Elasticsearch 特定领域语言

Elasticsearch 最基础和最强大的查询语言,基于JSON格式

KQL

Kibana 查询语言

用于快速和交互式地进行数据探索和可视化的查询语言,基于文本格式

EQL

事件查询语言

专门用于事件检测和威胁狩猎的查询语言,基于文本格式

Lucene

Elasticsearch 内部 Lucene 搜索引擎的原生语言

用于直接操作 Lucene 索引和文档的底层语言,基于文本格式

SQL

标准结构化查询语言的本地子集

广泛使用的关系型数据库查询语言,基于文本格式

Painless

Elasticsearch 脚本语言

用于对数据进行自定义处理和计算的脚本语言,基于Java语法

Canvas

由其他语言补充的表达式语言

用于创建动态和交互式的数据展示和可视化的表达式语言,基于文本格式

Timelion

用于时间序列的表达式语言

用于对时间序列数据进行分析和可视化的表达式语言,基于文本格式

Vega

用于描述数据处理和可视化的语法

用于创建复杂和高级的数据展示和可视化的语法,基于JSON格式

然而,这一情况也给用户带来了困扰,尤其是在需要决定在特定场合下应该使用哪种语言时。

复杂性是我们的敌人

虽然 Elasticsearch 在许多领域都表现出了非凡的能力,但其碎片化的查询语言在检索和分析方面给用户带来了挑战。我们所说的碎片化是什么意思?事实上,根据客户的反馈,在全观测性和安全分析场景中,在调查问题时,他们往往需要通过多达 6 个或更多的查询,使用不同的查询语言,并在 Kibana 中进行导航,才能找到所需的内容。因此,降低复杂性的关键在于能够在一个屏幕上以一种语言,以组合的方式尽可能多地在单一语句中进行搜索、过滤、转换、聚合和可视化。

并且,这种复杂性也表现在以下几个方面:

  1. 专业知识 - Elasticsearch 提供了丰富的功能,但需要在学习和配置方面进行投资。

  2. 经验 - 在调查过程中,需要多个窗口来提供必要的信息。规划和获取数据需要时间和精力。

  3. 语言 - Elastic 是变通之王。但是,实现查找、连接和内联统计等功能需要额外的工具。

因此,ES|QL 应运而生。ES|QL 的设计初衷是为了解决实际的查询问题,减轻用户学习负担,更加一致、简洁、实用、高效地解决实际问题。ES|QL 不仅具有直观易用性,还能在一个屏幕、一条语句中进行搜索、过滤、转换、汇总和可视化,从而减少复杂性的体现。

What is ES|QL

ES|QL 是一种功能强大的声明式语言,专为 Elasticsearch 设计,注重可组合性、表现力和速度。同时,它也是一种支持数据迭代探索的查询语言。

ES|QL 查询由一系列由管道分隔的命令组成。每个查询都以 Source 命令 开始。源命令会生成一个表,通常包含来自 Elasticsearch 的数据。

源命令后面可以跟一个或多个 处理命令。处理命令通过添加、删除或更改行和列来更改输入表。

你可以链接处理命令,并用管道符分隔:|。每个处理命令都作用于前一个命令的输出表。

查询的结果是最终处理命令生成的表。

与之前提到的ES支持的各种搜索语言不同,这九种语言中的每一种都具有以下功能之一:过滤、处理、分组、重命名、排序、查找和列剪枝等功能。然而,不能同时实现所有这些功能。相比之下,ES|QL则能够在单一、统一的管道化命令语法和数据模型中执行所有这些功能。ES|QL相对于许多其他语言来说更易于使用,功能也更强大。它独立于DSL,并可利用Elasticsearch集群提供的分布式处理功能。

重要的是,ES|QL 将会成为 Elasticsearch 的默认搜索语言

Highlight of ES|QL

专用高性能查询引擎

ES|QL 不仅是一种语言,还是 Elasticsearch 的一个完整的、专门的查询和计算引擎。ES|QL 查询不需要翻译或转换为 Query DSL:所有 ES|QL 查询都会经过词法分析、语法分析、语义分析、验证和优化,然后进行规划阶段以便对集群中的数据进行分布式执行。指定的目标节点负责本地执行,并利用 ES|QL 基础架构通过执行节点本地的重新规划来利用本地数据特性。

ES|QL 带来了一种在设计时考虑到性能的新执行引擎 —— 以块(block)的形式执行,而不是逐行执行,以向量化运算和缓存局部性为目标,并支持专业化和多线程。它是一个独立于现有 Elasticsearch 聚合框架的组件,具有不同的性能特征。

简单总结,ES|QL 的专用查询引擎具备以下特性:

  • 无需转译或翻译

  • 查询会被解析和优化以进行分布式执行

  • 以块(block)的形式运行,而不是逐行执行

  • 充分利用专业化和多线程技术

  • 以向量化和高速缓存定位为目标

在我们当前的基准测试中,ESQL 在许多情况下都优于 DSL,即便不进行任何的优化措施,也比已有的聚合框架更快:

上图中展示了 ES|QL 与原有搜索引擎在不同场景中的性能对比:

  • 绿色折线(search/aggs)代表已有的 DSL 搜索和原有的聚合引擎的性能

  • 蓝色折线(esql/shard partitioning)代表 ES|QL 在分片数据上单核运行

  • 粉红色折线(esql/doc partitioning)代表 ES|QL 在分片数据上多核运行

通过这个基准测试,我们看到,通过充分使用多线程技术,并且面向向量化和缓存的计算,ES|QL 已经实现了对现有框架在性能层面的遥遥领先,并且还将在未来充分受益于 Java 在向量化运算上的增强。

简约是终极的精致

我们深信简约是终极的精致,在 ES|QL,我们始终如一地践行这一理念。ES|QL 提供了管道式查询语言,让您能够轻松地在单一的语句中完成搜索、汇总、计算、转换和可视化等所有操作。并且,ES|QL 的查询语言与您可能已经熟悉的其他查询语言相似,为您提供了无缝体验。而在我们的下一代搜索引擎的设计标准是,需要能够实现更快的搜索速度,同时为数据调查和探索提供了全面的语言。我们一直致力于为用户提供更好的体验,并不断突破数据分析的极限。

其优势表现为:

  • 更快的查询速度:利用 Elasticsearch 查询引擎,可在多个阶段同时执行搜索和聚合,从而提高速度和效率。

  • 简化 Elasticsearch 和数据摄取:Elasticsearch 的搜索功能非常丰富,但需要投资学习。ES|QL 语法大大简化了对 Elasticsearch 及其功能的使用和理解。

  • 全新的变革性搜索引擎:ES|QL 查询引擎提供了lookup等新功能。只需一次查询,即可轻松实现搜索、聚合、计算和数据转换。未来,ES|QL 还将提供 inline stats 和 joins等其他功能

  • 快速洞察:直接从 Kibana Discover 创建可视化、计算和聚合,将调查工作流程浓缩在一个屏幕中,从而更快地获得答案。

  • 减少将数据引入 Elasticsearch 的摩擦:无论数据来源、结构、复杂性或数量如何,ES|QL 都能简化 Elasticsearch 中的数据摄取。

  • 警报:利用 ES|QL 写入可观测性和安全警报,并将汇总值作为阈值。通过强调有意义的趋势而非孤立的事件、减少误报并提供更具操作性的通知,提高检测准确性。

在解决方案上的增强

基于上面提到的 ES|QL 的诸多优点,在 Elastic 搜索平台上,各种解决方案都能够受益于 ES|QL 的强大功能。

搜索

使用 Elasticsearch 查询语言(ES|QL)提升搜索能力,这是一种创新的管道查询语言和引擎,旨在提供更好的开发体验和更高的性能。利用 ES|QL,用户可以在一次查询中检索、汇总、计算和转换数据。它的主要功能包括在查询时定义字段、执行数据丰富查询和并发处理查询。使用 ES|QL 以多种方式了解和探索数据。从利用客户端直接集成 API/代码,到直接从 Kibana 的搜索框中可视化结果,ES|QL 简化了您的数据调查,确保您轻松简单地从数据集中获得最大收益。有了 ES|QQL,开发人员将体会到代码和查询复杂性的降低,从而节省时间和成本。ES|QL 简化了查询结果在后续搜索中的使用,减少了对复杂脚本和多次查询的依赖,从而降低了计算成本。ES|QL 不仅仅是一个应用程序接口,它还是一种简单而强大的方式,可帮助您改变搜索方法。

全观测

使用 Elasticsearch 查询语言 (ES|QL),在 Elastic Observability 中对数据进行可视化和分析。您可以直接从搜索栏汇总、转换、计算和搜索您的指标、日志和跟踪数据,只需一次查询,即可优化定位性能瓶颈和系统问题,缩短解决问题的时间,消除浏览多个屏幕的麻烦。ES|QL 的高级查询引擎引入了多种功能,如在查询时定义字段、查找数据以丰富数据,以及并发查询处理以提高速度和效率。ES|QL 不仅能处理各种可观测性数据(无论数据来源和结构如何),还能帮助建立以汇总值作为阈值的可观测性警报。ES|QL 与 Elastic ML 和 AiOps 可通过强调有意义的趋势而非孤立事件、减少误报并提供更多可操作的通知,帮助提高检测准确性。ES|QL 可直接从搜索栏提供查询、聚合和可视化功能,从而确保系统性能和正常运行时间。

安全分析

利用 ES|QL(Elasticsearch 查询语言)提升安全态势。无论数据来源和结构如何,它都能加快 SecOps 工作流程并提高警报准确性。

快速灵活地搜索数据,并即时定义新字段,以推动调查和响应。汇总结果,例如查看最常访问的服务器。执行计算,例如入站流量和出站流量的比率。利用地理位置等上下文丰富结果。将结果可视化,以了解有意义的模式和异常情况。所有这些都只需一次管道式查询。

为了更准确地发出警报并减少警报疲劳,可在检测规则中加入汇总值。结果:信号更多,噪音更少。

ES|QL 对每个 SOC 开放,对每个分析师友好:

通过查找丰富数据:通过在当前数据集中引入额外的上下文,ES|QL 可提供更全面的视图,这在安全调查中至关重要。例如,客户可以通过一个搜索栏对 IP 地址执行查询,以确定其地理位置、与已知恶意实体的关联,或是否属于已知的云服务提供商。

总之,ES|QL 作为 Elastic 搜索平台上的核心功能,为各种解决方案带来了非凡的收益。它提供了高效准确的搜索、强大的数据分析和可视化能力,以及高度可扩展性和灵活性。这些优势使得各种解决方案能够更好地满足用户需求,并为企业带来更大的价值。

我在哪里可以得到它?

ES|QL 代码可在 Elasticsearch主分支中获取,并将作为 Elasticsearch 8.11 中的技术预览版发布。这是一项免费功能(basic订阅级别),可供所有人使用。每晚快照很快就会可供下载,因此请随时查看代码并自行构建。

因为我们正处于 ES|QL 的早期阶段,可能存在一些未解决的问题、障碍,甚至是错误,请提出问题。我们迫不及待地想与 Elasticsearch 社区分享 ES|QL!

我们代表 ES|QL 团队期待您的反馈!

 原文:ES|QL:Elasticsearch的新一代查询语言

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

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

相关文章

星环科技向量数据库Transwarp Hippo1.1发布:一库搞定向量+全文联合检索,提升大模型准确率

星环科技向量数据库Transwarp Hippo自发布已来,受到了众多用户的欢迎,帮助用户实现向量数据的存储、管理和检索,探索和实践大模型场景。在与用户不断地深入交流以及实践中,Hippo迎来了V1.1版本,一套系统即可支持向量与全文联合检索,提高文本数据的召回精度,从而提升大语…

VSCode修改扩展和用户文件夹目录位置(Windows)

VSCode修改扩展和用户文件夹目录位置(Windows) 前言:方法前期准备:方法1(强推荐)方法2(不太推荐)方法3(好麻烦,不太推荐) 前言: VSCod…

冒泡排序和简答选择排序

冒泡排序 一种典型的交换排序 类似水冒泡&#xff0c;大元素经不断的交换由水底慢慢的浮出 从头到尾&#xff0c;循环比较两相邻的元素 大的元素移到后面&#xff0c;小的放前面-每次循环&#xff0c;大的元素会排到最后 代码如下&#xff1a; #include<stdio.h> …

lvm删除分区、扩容分区

删除分区 查询分区信息 lsblk删除home盘 解除home文件挂载 unount /home // 查询挂载情况 mount -l | grep home 删除分区 //删除逻辑区 lvdisplay lvremove /dev/centos/home// 扩容root lvdisplay lvextend -l 100%FREE /dev/centos/root // 更新磁盘 根据文件系统类型…

推动产业升级及创新,Doris Summit Asia 2023 先进智造与电信论坛提前揭秘

峰会官网已上线&#xff0c;最新议程请关注&#xff1a;doris-summit.org.cn 即刻报名 Doris Summit 是 Apache Doris 社区一年一度的技术盛会&#xff0c;由飞轮科技联合 Apache Doris 社区的众多开发者、企业用户和合作伙伴共同发起&#xff0c;专注于传播推广开源 OLAP 与…

化妆品斑贴测试HRIPT/RIPT

HRIPT/RIPT测试是一种针对人类皮肤的安全性评估测试&#xff0c;它可以检测潜在的皮肤刺激和过敏物质。这项测试是根据国际标准制定的&#xff0c;通过将化妆品样品涂抹在人体皮肤上&#xff0c;观察是否会引发不适或过敏反应来评估产品的安全性。这些测试通常由专业的实验室进…

玩转MaxCompute SQL训练营! 数据分析挖掘迅速出师

用MaxCompute在数据里面挖呀挖呀挖&#xff0c;写花样的sql分析花样的数据&#xff01;云原生大数据计算服务 MaxCompute 是企业级Serverless智能数仓&#xff0c;向用户提供了完善的数据导入方案以及多种经典的分布式计算模型&#xff0c;能够更快速的解决用户海量数据计算问题…

门店经理视角下的零售数据分析分享

门店经理视角下的零售数据分析是怎样的&#xff1f;是以提升销售额和客户满意度为目标&#xff0c;通过数据分析工具对门店的运营情况进行分析和优化。那&#xff0c;作为主要载体的零售数据分析报表又该怎么做&#xff1f; 站在门店经理的立场看&#xff0c;门店的零售数据分…

IDEA如何设置项目包名分级

按上面的勾选即可&#xff01;

儿童疫苗接种:安全与注意事项

引言&#xff1a; 儿童的疫苗接种是维护其健康和预防传染病的重要措施。疫苗可以有效地保护儿童免受各种疾病的威胁&#xff0c;但在接种过程中需要家长和监护人特别关注一些注意事项&#xff0c;以确保接种的安全性和有效性。本文将深入探讨儿童疫苗接种的重要性&#xff0c;…

SpringCloud之Eureka注册中心解读

目录 Eureka基础概念 概述 Eureka Serve Eureka Client EnableEurekaServer EnableEurekaClient java代码实战 实战架构 父工程pom文件 eureka-server服务 student-service服务 teacher-service服务 测试 Eureka基础概念 概述 ​ Eureka 又称 服务注册中心&#…

WMS系统批次管理

一、定义 WMS系统的批次管理是指对物料和商品的生产批次进行跟踪、管理和控制的过程。批次是指一组具有共同特征的物料或商品&#xff0c;如生产日期、有效期、供应商、批号等。批次管理通过记录和追踪批次信息&#xff0c;确保物料和商品在供应链中的准确性、可追溯性和质量控…

基于ConvNeXt的跨模态特征融合模型用于RGB-D语义分割

A Cross-Modal Feature Fusion Model Based on ConvNeXt for RGB-D Semantic Segmentation 基于ConvNeXt的跨模态特征融合模型用于RGB-D语义分割 Tang X, Li B, Guo J, et al. A Cross-Modal Feature Fusion Model Based on ConvNeXt for RGB-D Semantic Segmentation[J]. Math…

自建应用-企业微信-侧边栏开发配置

企业微信侧边栏开发配置 配置侧边栏配置后效果图js-sdk 配置侧边栏 配置后效果图 js-sdk https://developer.work.weixin.qq.com/document/path/91789

【前端也要学算法系列】经典排序算法JS实现 —— 冒泡排序

一以贯之的努力&#xff0c;不得懈怠的人生。——长洱《天才基本法》 冒泡排序&#xff08;Bubble Sort&#xff09; 它会遍历 数据总个数减一 次需要排序的数列&#xff0c; 每次遍历时&#xff0c;它都会从前往后依次的比较相邻两个数的大小&#xff1b;如果前者比后者大&am…

antdv 锚点无滚动效果

背景&#xff1a;使用antd的锚点时&#xff0c;按照官方文档的用法配置之后发现锚点组件的锚点Title位置没办法随着我的页面滚动而变化&#xff0c;但是点击Title跳转具体锚定位置的功能却是没有问题的 解决方法&#xff1a;getContainer绑定滚动范围容器 <a-anchor class&q…

springboot时间管理系统springboot47

大家好✌&#xff01;我是CZ淡陌。一名专注以理论为基础实战为主的技术博主&#xff0c;将再这里为大家分享优质的实战项目&#xff0c;本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#xff0c;希望你能有所收获&#xff0c;少走一些弯路…

web前端面试-- http的各个版本的区别(HTTP/0.9、HTTP/1.0、HTTP/1.1、HTTP/2.0、HTTP/3.0)

本人是一个web前端开发工程师&#xff0c;主要是vue框架&#xff0c;整理了一些面试题&#xff0c;今后也会一直更新&#xff0c;有好题目的同学欢迎评论区分享 ;-&#xff09; web面试题专栏&#xff1a;点击此处 http的各个版本的区别 HTTP&#xff08;超文本传输协议&…

ICC2: 限制指定net绕线区域

我正在「拾陆楼」和朋友们讨论有趣的话题&#xff0c;你⼀起来吧&#xff1f; 拾陆楼知识星球入口 有些net有特殊绕线需求&#xff0c;只能在固定区域绕线&#xff0c;这时候就需要用到route corridor命令&#xff0c;参考用法如下: create_routing_corridor -name corridor_b…

【QT开发(9)】QT 中使用CUDA 代码

在之前的文章【CUDA编程&#xff08;1&#xff09;】 初识CUDA编程 写了CUDA相关的知识。最近也在研究 并行异构的课程&#xff0c;在QT里面加入相关的cuda 代码试一下&#xff01; 首先需要 在camke 中开启cuda&#xff0c;参考之前的文章【cmake开发&#xff08;12&#xff…