Elasticsearch 管道查询语言 ES|QL 现已正式发布

2024-06-06 14:20

本文主要是介绍Elasticsearch 管道查询语言 ES|QL 现已正式发布,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

作者:Costin Leau, George Kobar

今天,我们很高兴地宣布 ES|QL(Elasticsearch 查询语言)全面上市,这是一种从头开始设计的动态语言,用于转换、丰富和简化数据调查。在新的查询引擎的支持下,ES|QL 使用简单且熟悉的查询语法和并发处理来提供高级搜索,无论数据源和结构如何,都可以提高速度和效率。

借助 ES|QL 的管道语法,用户可以轻松链接多个操作,简化复杂的数据调查并使查询更加直观和迭代。对于安全性和可观察性用户来说,ES|QL 会感到既熟悉又创新,因为它通过易于使用的查询语言展示了 Elasticsearch 的高级搜索功能。 ES|QL 与 Kibana 集成,增强了数据可视化和分析体验,使用户能够在一个屏幕上进行整个调查,而无需在多个窗口之间切换。

通过不断发展,我们的目标是将 ES|QL 打造成适用于所有 Elasticsearch 用例的通用语言,包括检索增强生成 (RAG)。将 RAG 与地理空间功能和 ES|QL 集成将提高来自不同数据源的查询准确性。 ES|QL 与新的 Search AI Lake 架构的结合可根据需求自动调整资源,从而增强可扩展性、成本效率并简化管理。将计算与存储分离、索引与搜索分离可提高性能和灵活性,确保更快地检索和调查大量数据。

对于面临日益增长的可观察性和安全性需求的团队来说,ES|QL 将成为一个差异化因素。本文将深入探讨你可以在自己的用例中使用 ES|QL 的各种好处和方式。

Elasticsearch 的进步

14 年来,QueryDSL 一直作为 Elasticsearch 的基础语言,为众多组织提供搜索、可观察性和安全性。随着用户需求的发展,很明显他们需要的不仅仅是 QueryDSL 本身所能提供的。他们寻求一种查询语言,不仅可以简化数据调查,还可以通过将搜索、丰富、聚合和可视化集成到一个单一、高效的界面中来增强查询体验。他们需要先进的搜索功能,包括具有并发处理的查找功能,以处理来自不同来源和结构的大量数据。

为此,我们从向量化查询执行和其他数据库技术中汲取灵感,开发了 Elasticsearch 查询语言 (ES|QL)。借助 ES|QL,用户可以使用熟悉的管道 (“|”) 语法来链接操作,从而实现变革性的详细数据分析。

FROM logs-system.auth*
| WHERE host.os.type == "linux"AND event.outcome == "success"AND system.auth.ssh.event == "Accepted"AND (user.name IS NOT NULLAND source.ip IS NOT NULLAND source.port IS NOT NULLAND system.auth.ssh.method IS NOT NULL)
| STATS auth_count = COUNT(*) BY user.name, source.ip,source.port, system.auth.ssh.method
| SORT auth_count DESC

ES|QL 由强大的查询引擎提供支持,提供高级搜索功能以及跨核心和节点的并发处理,使用户能够无缝地跨不同数据源和结构进行查询。

没有对 Query DSL 的翻译或转译;每个 ES|QL 查询都经过语义解析、分析和验证,并优化为在保存数据的相关节点上并行执行的执行计划。目标节点处理查询,使用 ES|QL 提供的框架对执行计划进行即时调整。结果是开箱即用的闪电般快速的查询。

通向正式发布之路

自 8.11 推出以来,ES|QL 一直在不断完善和增强。测试阶段使我们的工程团队能够从社区收集宝贵的反馈,使我们能够迭代并满足用户的首要需求。在整个过程中,我们增强了 ES|QL 的功能,同时确保稳定性、性能以及与你日常使用的核心数据探索和可视化用户体验和工作流程的无缝集成。以下是使 ES|QL 全面可用的一些功能。

稳定性和性能

我们一直在忙于增强专用的ES|QL查询引擎,以确保其在负载下保持稳健的性能,保障运行节点的稳定性。也就是说,请参阅下面过去 6 个月中分组的改进(有关潜在更改的更多测试和确切详细信息,请参阅专用基准测试页面)。

此外,我们还实施了内存跟踪以实现精确的资源管理,并进行了全面的压力测试(包括严格的 HeapAttack),以确保在资源密集型查询期间仔细监控内存使用情况。我们的断路器还可以防止大型和小型堆大小节点上出现 OutOfMemoryErrors (OOME)。

在 Kibana 中可视化数据 使用 ES|QL 以全新方式探索

ES|QL 与 Elastic AI 助手一起使用

我们很高兴能够将生成式 AI 和 ES|QL 结合在一起,首先将它们集成到可观察性和安全性 AI 助手中,允许用户输入翻译成 ES|QL 命令的自然语言,从而实现简单、迭代和流畅的工作流程。

可视化并执行 ES|QL 查询或使用内联编辑弹出按钮对其进行编辑,并将它们无缝嵌入到仪表板中。此增强功能允许在创建图表时进行内联可视化编辑,从而缩短了工作流程,使用户可以更轻松地直接在助手中管理和保存可视化效果。

显着改进查询生成和性能。用户现在可以使用自然语言来可视化 ES|QL 查询,使用内联编辑弹出按钮对其进行编辑,并将其无缝嵌入到仪表板中。此增强功能允许在创建图表时进行内联可视化编辑,从而缩短了工作流程,使用户可以更轻松地直接在助手中管理和保存可视化效果。

ESQL

直接从 Kibana 仪表板创建和编辑 ES|QL 图表

通过直接从 Kibana 仪表板内创建和修改使用 ES|QL 构建的图表,简化你的工作流程并快速洞察数据。你还可以在图表中执行 ES|QL 查询的内联编辑,以快速适应故障排除或威胁追踪中的变化。

ESQL

ES|QL 查询历史记录

重复自己可能会令人沮丧,如果你需要重新运行刚才执行的查询,也会同样令人烦恼。现在,借助 ES|QL,你可以通过 ES|QL 查询历史记录快速访问最近的查询。直接在 Kibana Discover、ES|QL 可视化、Kibana 警报或 Kibana 地图中查看、重新运行最近 20 个 ES|QL 查询,以便快速轻松地访问。

混合规划和动态数据缩减

对于大型 Elasticsearch 部署,我们一直在数百个节点以及多达数十万个分片和字段上测试 ES|QL,以确保查询性能随着集群的增长和更多节点的添加而始终保持高性能。

我们扩展了 ES|QL 执行混合规划的能力,以更好地处理数据的动态特性(无论是添加的新字段还是新段)并利用每个节点特有的本地数据模式:

协调节点(接收ES|QL查询并驱动其执行)基于数据的全局视图执行全局规划后,将计划广播到所有可以执行该计划的数据节点。但是,在执行之前,每个节点都会根据每个节点各自的当前存储统计信息在本地更改计划。一个常见的场景是由于模式演变而导致稀疏映射中的早期过滤器评估。

我们正在积极开发一种针对大分片场景的动态数据缩减技术,以最大程度地减少协调器和数据节点之间的 I/O 流量,并减少 Lucene 读取器在查询期间保持打开状态的持续时间。这种方法(包括共享中间结果)在提高跨多个分片的查询效率和运行时间方面显示出巨大的希望。请继续关注未来博客中有关查询执行和架构的更多信息。

异步查询

异步查询使用户能够异步运行长时间运行的 ES|QL 查询。客户不再需要等待结果;相反,他们可以监控进度并在数据准备好后检索数据。通过利用 wait_for_completion_timeout 参数,用户可以定制自己的体验,选择是同步等待还是在指定超时后切换到异步模式。此增强功能不仅提供了更大的灵活性,还优化了资源管理,确保用户的查询过程更顺畅、更高效

长时间运行的 ES|QL 查询可以异步执行,以便客户端可以监视进度并在可用时检索结果,而不是阻塞它们:

POST /_query/async
{"query": """FROM library| STATS MAX(page_count) BY year = BUCKET(release_date, 1 year)| SORT year| LIMIT 5""","wait_for_completion_timeout": "2s"
}

通过 wait_for_completion_timeout 客户端可以在切换到异步超时之前选择一个合适的超时来等待结果(并具有同步行为)。

改进的语言和人体工程学

我们简化了 STATS 命令,为数据分析提供更大的灵活性和简单性。以前,用户必须借助额外的 EVAL 命令来进行任意计算以及需要单独的 EVAL 命令的聚合和分组:

FROM company
// use eval to manipulate the grouping column and
// create a conditional for data sanitization
| EVAL g = tenure % 10, trips = COALESCE(trips, 0) 
| STATS avg_trips = AVG() BY g

此限制不再是必要的,因为聚合直接在 STATS 命令内接受表达式(并且它们本身也可以组合),从而消除了额外 EVAL 的需要以及由于临时字段而导致的列污染:

FROM company
| STATS avg_trips = AVG(COALESCE(trips, 0)) BY g = tenure %10

日期时间单位

ES|QL 现在改进了对日期时间过滤的支持。认识到过滤任务中对日期时间算术的普遍需求,ES|QL 现在支持缩写单位,使查询更加直观和高效。例如,用户现在可以使用 “year”、“month” 和 “month” 等熟悉的缩写轻松指定日期范围。

FROM index
| WHERE @timestamp > now() - 1 year + 1 month + 1 week

此更新简化了查询构造,使用户能够更简洁、准确地表达日期时间条件。

字符串文字的隐式数据类型转换

为了最大限度地减少从字符串声明创建专用类型(例如日期)的麻烦,ES|QL 现在使用内置转换函数将字符串常量隐式转换为其目标类型:

FROM index
// convert the declared strings to ip and date-time
| WHERE host_ip in ("127.0.0.1", "::1")AND access_time > "2024-05-15T12:34:56Z"

注意

  • 只有常量(或文字)是转换的候选者,列被忽略 - 用户必须显式地使用转换函数。
  • 不支持将字符串文字转换为其等价的数字,因为它们可以直接声明;即 “1”+2 会抛出错误,只需将表达式声明为 1+2 即可。

原生 ES|QL 客户端

虽然 ES|QL 通过 _query REST 端点普遍可用,但我们正在努力提供丰富的、固执己见的 API,以便以各种流行语言本地访问 ES|QL。

虽然完成上述所有项目需要几个版本,但人们可以通过常规 Elasticsearch 客户端使用 ES|QL,例如,以 Java 或 PHP 对象的形式访问 ES|QL 结果,并在 Python 中将它们作为数据帧进行操作; Jupyter 用户应参阅专用的入门指南笔记本。

自 8.11 首次发布技术预览版以来,ES|QL 一直在 Elasticsearch 生态系统的各个部分发挥作用。例如,可观察性用于使用专门的 AI 助手来简化 OTel 操作。如果我们有更多时间,我们还会提到引入的许多其他函数,例如多值标量字段、地理空间分析(标量函数和聚合函数)和日期时间处理。

技术预览版中跨集群搜索中的 ES|QL

Elasticsearch 中的跨集群搜索使用户能够跨多个 Elasticsearch 集群查询数据,就像数据存储在单个集群中一样,从而提供统一查询、全局洞察和许多其他效率。现在,在技术预览版中,具有跨集群搜索功能的 ES|QL 将其查询能力扩展到跨分布式集群,使用户能够利用 ES|QL 从单个 UI 中查询和分析数据,无论数据位于何处。

虽然 ES|QL 作为基本许可证免费提供,但在跨集群搜索中使用 ES|QL 将需要企业级许可证。要在跨集群搜索中使用 ES|QL,请使用格式为 <remote_cluster_name>:<target> 的 FROM 命令,从远程集群上的 my-index-000001 检索数据。

FROM cluster_one:my-index-000001
| LIMIT 10

展望未来

搜索、嵌入和 RAG

我们很高兴与大家分享一项激动人心的进展:利用 ES|QL 进行高级信息检索,包括全文搜索和 AI/ML 支持的探索。我们的团队致力于使 ES|QL 成为评分、混合排名以及与 Elasticsearch 中的大型语言模型 (LLM) 集成的最佳工具。

该专用命令将简化检索过程,使用户能够对结果进行过滤和评分。在下面的示例中,我们展示了一个综合搜索场景,结合了范围过滤器、快速查询和混合搜索技术。

这是它可能实现的预览,命名为 TBD(Search 或 Retrieval):

// dedicated search command
SEARCH images [// range filter| WHERE date > now() - 1 month// (fast) query for filtering and scoring (returned in _score column)| RANK MATCH "mountain lake"// filter by score| WHERE _score > 0.1// keep only top 100 results | LIMIT 100// perform hybrid search on a user defined image vector using knn | RANK KNN image user_image_vector K 10
]
// break down the results by rating and count the votes
| STATS c = COUNT(votes) BY rating
// return only the top 5 resuls
| LIMIT 5

例如,上面的查询演示了通过评级检索前 5 个最受欢迎的图像,其描述中包含术语 “mountain lake”,类似于用户定义的图像矢量。该引擎在幕后智能地管理过滤器、重新排列查询并应用重新排名策略,确保最佳搜索性能。

这一进步有望彻底改变 Elasticsearch 中的信息检索,为用户提供无与伦比的控制和探索和发现相关内容的效率。

时间序列、指标和 O11y

Elasticsearch 通过时间序列数据流 (TSDS) 提供了专用的指标解决方案,这是一个强大的概念,可以通过使用专门的类型和路由将磁盘存储减少高达 70%。

我们计划在 ES|QL 中充分利用这些功能 - 首先引入专用命令:

METRICS pods load=avg(cpu), writes=max(rate(indexing_requests)) BY pod
| SORT pod

内联统计 - 不减少数据的聚合

ES|QL 中的 STATS 命令对于汇总统计数据非常有用,但当用户想要聚合数据而不丢失其原始上下文时,它通常会带来挑战。例如,如果你希望在每件 T 恤价格旁边显示平均类别价格,传统的聚合方法可能会掩盖原始数据。输入 INLINESTATS:该功能旨在通过执行 “inline - 内联” 统计来解决此问题。

借助 INLINESTATS,用户可以计算每个组内的统计数据,并将结果无缝集成回原始数据集,从而保留原始组的上下文。这一强大的功能增强了 ES|QL 中统计分析的清晰度和深度,使用户能够获得有意义的见解,同时保持数据的完整性。

FROM shop
// compute the average price for each category
// and add it under 'avg_price' column;
// the produced column is now available on all
// entries used to perform the inline grouping
| INLINESTATS avg_price = AVG(price) BY category

现在开始尝试

ES|QL 的推出标志着 Elastic 功能的重大进步,为用户提供了强大而直观的数据查询和分析工具。凭借其简化的语法、强大的功能和创新的特性,ES|QL 为用户打开见解并从数据中获取价值开辟了新途径。无论你是经验丰富的 Elasticsearch 用户还是刚刚入门,ES|QL 都邀请你亲自探索、实验和体验 Elasticsearch 查询语言的强大功能。

请务必查看我们充满示例的演示操场或尝试 Elastic Cloud。已经运行 Elasticsearch 了吗?只需将你的集群升级到 8.14 并尝试一下即可。

本文中描述的任何特性或功能的发布和时间安排均由 Elastic 自行决定。当前不可用的任何特性或功能可能无法按时交付或根本无法交付。

准备好自己尝试一下了吗?开始免费试用。
想要获得 Elastic 认证吗?了解下一次 Elasticsearch 工程师培训的举办时间!

原文:Elasticsearch piped query language, ES|QL, now generally available — Elastic Search Labs

这篇关于Elasticsearch 管道查询语言 ES|QL 现已正式发布的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1036359

相关文章

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

高效+灵活,万博智云全球发布AWS无代理跨云容灾方案!

摘要 近日,万博智云推出了基于AWS的无代理跨云容灾解决方案,并与拉丁美洲,中东,亚洲的合作伙伴面向全球开展了联合发布。这一方案以AWS应用环境为基础,将HyperBDR平台的高效、灵活和成本效益优势与无代理功能相结合,为全球企业带来实现了更便捷、经济的数据保护。 一、全球联合发布 9月2日,万博智云CEO Michael Wong在线上平台发布AWS无代理跨云容灾解决方案的阐述视频,介绍了

Vue3项目开发——新闻发布管理系统(六)

文章目录 八、首页设计开发1、页面设计2、登录访问拦截实现3、用户基本信息显示①封装用户基本信息获取接口②用户基本信息存储③用户基本信息调用④用户基本信息动态渲染 4、退出功能实现①注册点击事件②添加退出功能③数据清理 5、代码下载 八、首页设计开发 登录成功后,系统就进入了首页。接下来,也就进行首页的开发了。 1、页面设计 系统页面主要分为三部分,左侧为系统的菜单栏,右侧

maven发布项目到私服-snapshot快照库和release发布库的区别和作用及maven常用命令

maven发布项目到私服-snapshot快照库和release发布库的区别和作用及maven常用命令 在日常的工作中由于各种原因,会出现这样一种情况,某些项目并没有打包至mvnrepository。如果采用原始直接打包放到lib目录的方式进行处理,便对项目的管理带来一些不必要的麻烦。例如版本升级后需要重新打包并,替换原有jar包等等一些额外的工作量和麻烦。为了避免这些不必要的麻烦,通常我们

禅道Docker安装包发布

禅道Docker安装包发布 大家好, 禅道Docker安装包发布。 一、下载地址 禅道开源版:   /dl/zentao/docker/docker_zentao.zip  备用下载地址:https://download.csdn.net/download/u013490585/16271485 数据库用户名: root,默认密码: 123456。运行时,可以设置 MYSQL_ROOT_P

微软正式推出 Spartan 斯巴达浏览器

作为用于替代 IE 浏览器的下一代继任者,微软的 Project Spartan 斯巴达浏览器可算是吊足了玩家们的胃口!如今,在最新的 Windows 10 Build 10049 版本起,它终于正式登场了。 斯巴达浏览器搭载了全新的渲染引擎、新的用户界面并集成了 Cortana 语音助手。功能上新增了稍后阅读列表、阅读视图、F12开发者工具、支持网页注释 (手写涂鸦),可以保存到 O

ElasticSearch的DSL查询⑤(ES数据聚合、DSL语法数据聚合、RestClient数据聚合)

目录 一、数据聚合 1.1 DSL实现聚合 1.1.1 Bucket聚合  1.1.2 带条件聚合 1.1.3 Metric聚合 1.1.4 总结 2.1 RestClient实现聚合 2.1.1 Bucket聚合 2.1.2 带条件聚合 2.2.3 Metric聚合 一、数据聚合 聚合(aggregations)可以让我们极其方便的实现对数据的统计、分析、运算。例如:

C++编程:ZeroMQ进程间(订阅-发布)通信配置优化

文章目录 0. 概述1. 发布者同步发送(pub)与订阅者异步接收(sub)示例代码可能的副作用: 2. 适度增加缓存和队列示例代码副作用: 3. 动态的IPC通道管理示例代码副作用: 4. 接收消息的超时设置示例代码副作用: 5. 增加I/O线程数量示例代码副作用: 6. 异步消息发送(使用`dontwait`标志)示例代码副作用: 7. 其他可以考虑的优化项7.1 立即发送(ZMQ_IM

OpenGL ES学习总结:基础知识简介

什么是OpenGL ES? OpenGL ES (为OpenGL for Embedded System的缩写) 为适用于嵌入式系统的一个免费二维和三维图形库。 为桌面版本OpenGL 的一个子集。 OpenGL ES管道(Pipeline) OpenGL ES 1.x 的工序是固定的,称为Fix-Function Pipeline,可以想象一个带有很多控制开关的机器,尽管加工

OpenGL ES 2.0渲染管线

http://codingnow.cn/opengles/1504.html Opengl es 2.0实现了可编程的图形管线,比起1.x的固定管线要复杂和灵活很多,由两部分规范组成:Opengl es 2.0 API规范和Opengl es着色语言规范。下图是Opengl es 2.0渲染管线,阴影部分是opengl es 2.0的可编程阶段。   1. 顶点着色器(Vert