作者:来自 Elastic Tomás Murúa
让我们回顾一下 ES|QL 的历史和它的改进。
更多阅读,Elasticsearch:ES|QL 查询展示。
Elasticsearch 配备了众多新功能,帮助你为自己的用例构建最佳搜索方案。查看我们的示例笔记本了解更多内容,开始免费云试用,或在本地机器上试用 Elastic。
自首次发布以来,ES|QL 一直在不断发展。引入了新的命令、函数和功能,以覆盖更多用例。本文将回顾该语言在各版本中的成长过程以及每次更新所带来的变化。
什么是 ES|QL?
ES|QL(Elasticsearch Query Language)是一种管道式查询语言,用于处理 Elasticsearch 中的数据。它允许用户通过一系列命令来过滤、转换和汇总数据,并以 JSON 或(在指定时)表格格式返回结果,可通过 _query API 直接集成到后端工作流,或在 Kibana 中用于可视化、仪表板和告警。
ES|QL 的推出旨在简化常见的数据分析流程,减少在工具或查询语言之间切换的需要。它的目标是提供一种一致、可读性强的语法,适用于可观测性、安全性和通用用例,让你可以从一个入口轻松对 Elasticsearch 数据提出复杂的问题。
例如,一个简单的 ES|QL 查询可能如下所示:
FROM kibana_sample_data_logs
| WHERE @timestamp > NOW() - 1d
| KEEP @timestamp, response, message, tags
| SORT response DESC
使用示例网站日志数据集生成的示例。
我们已经撰写了许多关于 ES|QL 的文章,推荐你阅读:
-
新加入 Elasticsearch 仓库:ES|QL
-
从梦想走向现实:宣布 Elastic 的管道查询语言 ES|QL
-
ES|QL 入门指南(Elasticsearch Query Language)
-
Elasticsearch 管道查询语言 ES|QL 现已正式发布
-
ES|QL,用于搜索 —— 引入评分和语义搜索
-
还有更多!
以下是从初始发布开始的 ES|QL 各版本更新摘要。
发布前
在首次公开发布(8.11)之前,ES|QL 已经开发了一年多。团队在 Elasticsearch 内部设计并构建了一个专用的计算和查询引擎,以便在靠近数据的位置进行高级处理。
Elasticsearch 8.11(技术预览)
ES|QL 作为一种管道查询语言在技术预览版中首次引入,经过数月开发,旨在简化数据分析流程。该初始版本引入了函数,如 LEAST、GREATEST、LEFT、RIGHT、CEIL,以及对持续时间和时间段的算术操作。你可以比较和排序文本字段,并使用 TopN 根据多值块对行进行排序。
Elasticsearch 8.12
该版本重点提升 ES|QL 的速度和效率。新增 PROFILE 选项,用于显示每个查询步骤所耗时间,方便调试与优化。ES|QL 开始支持 GEO_POINT 和 CARTESIAN_POINT,可以在查询中使用空间数据。内部优化减少了内存使用,并更高效地加载多个字段。此外,现在可以直接访问 _source 字段,从而获取原始文档内容。
Elasticsearch 8.13
引入异步查询 API,支持在后台执行长时间运行的查询并稍后获取结果。新增函数 TO_UPPER、TO_LOWER、date_diff、MV_FIRST 和 MV_LAST,方便处理字符串和多值字段。=~ 运算符支持不区分大小写的比较。支持跨集群 enrich 查询,即可以基于远程索引对查询进行增强。STATS 命令现在支持聚合表达式。
Elasticsearch 8.14(正式发布)
ES|QL 现已正式发布。可以在 STATS 表达式中对值进行分组,并按表达式排序,而不仅限于常规字段。新增函数 LOCATE(查找子串)、SIGNUM(返回给定数字的符号),以及空间辅助函数 ST_CONTAINS、ST_DISJOINT 和 ST_WITHIN。正则表达式和 CASE 表达式得到了优化。enrich 管道支持文本字段,大型数组的序列化速度也更快。
Elasticsearch 8.15
现在你可以使用 ::
显式转换值类型,例如从字符串转为整数。新增 top_list 聚合类型,帮助汇总最常见的值,ip_prefix 函数获取 IP 地址的前缀。新增 Arrow 格式输出,实现与 pandas 或支持 Arrow 的引擎的数据互操作。同时,_ignored 元数据字段也被公开。
Elasticsearch 8.16
新增函数 EXP、HYPOT、SPACE 和 REVERSE。MIN、MAX 和 TOP 聚合支持更多数据类型,如字符串、IP 和布尔值。现在可以使用 MV_PERCENTILE 计算多值字段的百分位数,使用 MV_PSERIES_WEIGHTED_SUM 进行加权评分。性能分析和内存跟踪得到改进,帮助用户更好理解性能和资源使用。
Elasticsearch 8.17
ES|QL 在技术预览中开始支持 date_nanos,提高时间序列用例的精度。新增标量函数 BIT_LENGTH 和 BYTE_LENGTH,分别返回字符串的位数和字节数。skip_unavailable 现在在查询规划阶段生效,提升多集群环境下的容错能力。新函数指标(metrics)允许跟踪哪些 ES|QL 函数使用最多。。
8.18 和 9.0 同时发布,但更新日志仍然不同。
Elasticsearch 8.18
LOOKUP JOIN 进入技术预览,允许跨索引连接数据。例如,将日志与元数据或用户配置文件匹配。全文评分通过 _score 正式支持,MATCH 等函数改进了新选项和兼容性。CATEGORIZE 针对大型数据集进行了优化。ST_EXTENT_AGG 和 ST_ENVELOPE 启用空间汇总,如为地理数据查找边界框。date_nanos 支持扩展到所有相关日期函数。
Elasticsearch 9.0
LOOKUP JOIN 进入技术预览。KQL(技术预览)允许将 Kibana 风格的过滤器嵌入查询。
全文匹配评分支持 disjunctions(例如,“this OR that”),_score 现在可在表达式中使用。高级遥测、计划验证和 TopN 下推中的部分排序字段都有助于更快、更智能的查询执行。
技术增强包括更智能的字段上限解析、跨集群查询的遥测、CCS 的异步元数据以及对未映射字段的支持。STARTS_WITH、ENDS_WITH 和 TO_UPPER 等函数现已下推到 Lucene 以提高性能。
要了解每个版本的详细信息,你可以查看我们为这篇文章整理的完整时间线,如果你想亲自试验 ES|QL,可以尝试 ES|QL 沙盒。
原文:Timeline of ES|QL improvements - Elasticsearch Labs