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

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

作者:李捷

学会选择很难。学会正确选择更难。而在一个充满无限可能的世界里学会正确选择则更难,也许是太难了。” 巴里-施瓦茨(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的新一代查询语言

相关文章:

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

作者:李捷 “学会选择很难。学会正确选择更难。而在一个充满无限可能的世界里学会正确选择则更难,也许是太难了。” 巴里-施瓦茨(Barry Schwartz)在《选择的悖论--多就是少》(The Paradox of Choice -More is Less&…...

C语言实现句子中的单词颠倒排序

一、运行结果 二、源代码 # define _CRT_SECURE_NO_WARNINGS # include <stdio.h> # include <assert.h>//实现逆转函数&#xff1b; void reverse(char* left, char* right) {//断言left和right都不能为空&#xff1b;assert(left);assert(right);//循环逆转字母…...

MySQL学习(八)——锁

文章目录 1. 锁概述2. 全局锁2.1 全局锁的必要性2.2 语法2.3 全局锁的特点 3. 表级锁3.1 表锁3.2 元数据锁3.3 意向锁3.4 自增锁 4. 行级锁4.1 介绍4.2 记录锁4.3 间隙锁4.4 临键锁 1. 锁概述 锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中&#xff0c;除传…...

让iPhone用电脑的网络上网

让iPhone用电脑的网络上网&#xff0c;可以按照以下步骤操作&#xff1a; 在iPhone上找到并点击“设置”选项&#xff0c;进入“蜂窝移动网络”。打开“个人热点”选项。此时下方的弹出对话框会显示“仅USB”。用数据线将你的iPhone与电脑相连&#xff0c;并在电脑上打开“控制…...

ThreeJS-3D教学十-有宽度的line

webgl中线是没有宽度的&#xff0c;现实的应用中一般做法都是将线拓宽成面来绘制。默认threejs的线宽是无法调节的&#xff0c;需要用有厚度的线 THREE.Line2。 先看效果图&#xff1a; 看下代码&#xff1a; <!DOCTYPE html> <html lang"en"> <he…...

安装Elasticsearch步骤(包含遇到的问题及解决方案)

注&#xff1a;笔者是在centos云服务器环境下安装的Elasticsearch 目录 1.安装前准备 2.下载Elasticsearch 3.启动Elasticsearch 非常容易出问题 第一次运行时&#xff0c;可能出现如下错误&#xff1a; 一、内存不足原因启动失败 二、使用root用户启动问题 三、启动ES自…...

网络编程面试笔试真题

网络编程笔试面试真题 1、关于Linux系统中多线程的信号处理&#xff0c;说法中不正确的是&#xff1f; A&#xff1a;在线程环境霞&#xff0c;产生的信号是传递给整个进程的 B&#xff1a;一般情况下&#xff0c;信号会随机给进程的一个线程 C&#xff1a;对某个信号处理函数…...

MySQL官方文档如何查看,MySQL中文文档

这里写自定义目录标题 MySQL官方文档如何查看MySQL中文文档 MySQL官方文档如何查看 MySQL官网地址&#xff1a;https://dev.mysql.com/doc/ 比如这里我要找InnoDB架构 MySQL中文文档 MySQL 5.1中文文档地址&#xff1a;https://www.mysqlzh.com/...

第七章:最新版零基础学习 PYTHON 教程—Python 列表(第四节 -如何在 Python 中查找列表的长度)

列表是 Python 日常编程不可或缺的一部分,所有 Python 用户都必须学习,了解其实用程序和操作是必不可少的,而且总是有好处的。因此,本文讨论了找到第一个这样的实用程序。使用Python 的列表中的元素。 目录 在 Python 中查找列表的长度...

XPS虽没流行,但还在使用!在Windows 10中打开XPS文件的最佳方法

当Windows Vista发布时&#xff0c;微软推出了XPS格式&#xff0c;这是PDF的替代品。XPS文件格式并不是什么新鲜事&#xff0c;但从未获得过多大的吸引力。 因此&#xff0c;XPS&#xff08;XML Paper Specification&#xff09;文件是微软对Adobe PDF文件的竞争对手。尽管XPS…...

23 种设计模式详解(C#案例)

&#x1f680;设计模式简介 设计模式&#xff08;Design pattern&#xff09;代表了最佳的实践&#xff0c;通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时…...

@SpringBootApplication配置了scanBasePackages导致请求一直404,分析下原因

出现RequestMapping注解的Controller类可能是因为SpringBootApplication注解中配置了scanBasePackages导致的请求一直返回404错误。 SpringBootApplication注解是Spring Boot的核心注解之一&#xff0c;它用于启动Spring Boot应用程序。这个注解实际上是一个组合注解&#xff…...

{大厂漏洞 } OA产品存在SQL注入

0x01 漏洞介绍 江苏叁拾叁-OA是由江苏叁拾叁信息技术有限公司开发的一款OA办公平台&#xff0c;主要有知识管理&#xff0c;工作流程&#xff0c;沟通交流&#xff0c;辅助办公&#xff0c;集成解决方案&#xff0c;应用支撑平台&#xff0c;基础支撑等功能。 该系统也与江苏叁…...

6-8 舞伴问题 分数 15

void DancePartner(DataType dancer[], int num) {LinkQueue maleQueue SetNullQueue_Link();LinkQueue femaleQueue SetNullQueue_Link();// 将男士和女士的信息分别加入对应的队列for (int i 0; i < num; i) {if (dancer[i].sex M){EnQueue_link(maleQueue, dancer[i]…...

samba服务器的功能是什么

Samba服务器是一个开源的网络文件共享服务&#xff0c;其主要功能是在不同操作系统之间实现文件和打印机共享。它最常用于将Linux/Unix系统与Windows系统互联&#xff0c;但也支持其他操作系统。 以下是Samba服务器的主要功能&#xff1a; 文件共享&#xff1a;Samba允许用户在…...

MSQL系列(五) Mysql实战-索引最左侧匹配原则分析及实战

Mysql实战-索引最左侧匹配原则分析及实战 前面我们讲解了索引的存储结构&#xff0c;BTree的索引结构&#xff0c;以及索引最左侧匹配原则&#xff0c;Explain的用法&#xff0c;今天我们来实战一下 最左侧匹配原则 1.联合索引最左侧匹配原则 联合索引有一个最左侧匹配原则 …...

react|redux状态管理

react|redux状态管理 参考官网&#xff1a;https://cn.redux-toolkit.js.org/tutorials/quick-start 状态管理使用流程 1、安装&#xff1a; npm install react-redux reduxjs/toolkit2、创建store.js 通过configureStore的hook对reducer&#xff08;或slice&#xff09;进行…...

Python之旅----判断语句

布尔类型和比较运算符 布尔类型 布尔类型的定义 布尔类型的字面量&#xff1a; True 表示真&#xff08;是、肯定&#xff09; False 表示假 &#xff08;否、否定&#xff09; 也就是布尔类型进行判断&#xff0c;只会有2个结果&#xff1a;是或否 定义变量存储布尔类型…...

【JavaEE】文件操作和IO

1 什么是文件&#xff1f; 针对硬盘这种持久化存储的I/O设备&#xff0c;当我们想要进行数据保存时&#xff0c;往往不是保存成一个整体&#xff0c;而是独立成一个个的单位进行保存&#xff0c;这个独立的单位就被抽象成文件的概念 2 文件路径 文件路径就是指咱们文件系统中…...

python使用dataset快速使用SQLite

目录 一、官网地址 二、安装 三、 快速使用 一、官网地址 GitHub - pudo/dataset: Easy-to-use data handling for SQL data stores with support for implicit table creation, bulk loading, and transactions. 二、安装 pip install dataset 如果是mysql&#xff0c;则…...

Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务

通过akshare库&#xff0c;获取股票数据&#xff0c;并生成TabPFN这个模型 可以识别、处理的格式&#xff0c;写一个完整的预处理示例&#xff0c;并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务&#xff0c;进行预测并输…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法&#xff1a;原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件&#xff0c;如包含恶意代码、敏感数据或欺诈内容的文档&#xff0c;在企业协同办公环境中&#xff08;如Teams、Google Workspace&#xff09;尤为重要。结合大模型技术&…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

Java面试专项一-准备篇

一、企业简历筛选规则 一般企业的简历筛选流程&#xff1a;首先由HR先筛选一部分简历后&#xff0c;在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如&#xff1a;Boss直聘&#xff08;招聘方平台&#xff09; 直接按照条件进行筛选 例如&#xff1a…...

3-11单元格区域边界定位(End属性)学习笔记

返回一个Range 对象&#xff0c;只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意&#xff1a;它移动的位置必须是相连的有内容的单元格…...

docker 部署发现spring.profiles.active 问题

报错&#xff1a; org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...

二维FDTD算法仿真

二维FDTD算法仿真&#xff0c;并带完全匹配层&#xff0c;输入波形为高斯波、平面波 FDTD_二维/FDTD.zip , 6075 FDTD_二维/FDTD_31.m , 1029 FDTD_二维/FDTD_32.m , 2806 FDTD_二维/FDTD_33.m , 3782 FDTD_二维/FDTD_34.m , 4182 FDTD_二维/FDTD_35.m , 4793...

「Java基本语法」变量的使用

变量定义 变量是程序中存储数据的容器&#xff0c;用于保存可变的数据值。在Java中&#xff0c;变量必须先声明后使用&#xff0c;声明时需指定变量的数据类型和变量名。 语法 数据类型 变量名 [ 初始值]; 示例&#xff1a;声明与初始化 public class VariableDemo {publi…...

多模态学习路线(2)——DL基础系列

目录 前言 一、归一化 1. Layer Normalization (LN) 2. Batch Normalization (BN) 3. Instance Normalization (IN) 4. Group Normalization (GN) 5. Root Mean Square Normalization&#xff08;RMSNorm&#xff09; 二、激活函数 1. Sigmoid激活函数&#xff08;二分类&…...

Linux实现线程同步的方式有哪些?

什么是线程同步&#xff1f; 想象一下超市收银台&#xff1a;如果所有顾客&#xff08;线程&#xff09;同时挤向同一个收银台&#xff08;共享资源&#xff09;&#xff0c;场面会一片混乱。线程同步就是给顾客们发"排队号码牌"&#xff0c;确保&#xff1a; 有序访…...