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

为 Elasticsearch Ruby Client 引入 ES|QL 查询生成器

作者:来自 Elastic Fernando Briano

学习如何使用最近发布的 Elasticsearch Ruby Client 的 ES|QL 查询生成器。一个用 Ruby 代码更轻松构建 ES|QL 查询的工具。

亲身体验 Elasticsearch:深入我们的示例笔记本,开始免费的云试用,或立即在本地机器上尝试 Elastic。

我们最近发布了 elastic-esql,这是一个在 Apache 2 许可下发布的 Ruby gem。这个 gem 允许你用地道的 Ruby 构建 Elastic 的 ES|QL 查询,然后你可以将其与 ES|QL 查询 API 一起使用。ES|QL 允许开发者通过查询过滤、转换和分析存储在 Elasticsearch 中的数据。它使用 “管道” ( | ) 来逐步处理数据。而这个 gem 则使用 Ruby 函数,你可以将这些函数链式连接到原始对象以构建更复杂的查询:

ESQL:

FROM sample_data | LIMIT 2 | SORT @timestamp DESC

Ruby:

Elastic::ESQL.from('sample_data').limit(2).sort('@timestamp').descending

安装

这个 gem 可以通过 RubyGems 安装:

gem install elastic-esql

或者它可以添加到项目的 Gemfile 中:

gem 'elastic-esql'

用法

你可以一次性构建完整查询,或者使用 from 或 row 这样的 source 命令创建一个查询对象,然后链式调用 ES|QL 方法来扩展它。

query = Elastic::ESQL.from('sample_data')
query.limit(2).sort('@timestamp')

这个 gem 会在 to_s 方法中将代码转换为 ES|QL,因此当它被打印或转换为 String 时会返回 ES|QL 查询:

query = Elastic::ESQL.from('sample_data').limit(2).sort('@timestamp').descending
query.to_s
# => "FROM sample_data | LIMIT 2 | SORT @timestamp DESC"

你可以通过使用每个函数对应的 ! 版本来实例化一个查询对象并修改其初始状态:

query = Elastic::ESQL.from('sample_data')
query.to_s
# => "FROM sample_data"
query.limit!(2).sort!('@timestamp')
query.to_s
# => "FROM sample_data | LIMIT 2 | SORT @timestamp"

该工具提供了方便的方法将额外步骤链式添加到 ES|QL 函数中,比如 enrich 和 sort。一旦你在 Elastic::ESQL 对象上调用 enrich,就可以在其后链式调用 on 和 with:

esql.enrich!('policy').on('a').with({ name: 'language_name' })

在使用 sort 之后,你也可以将 desc、asc、nulls_first 和 nulls_last 链式添加到查询中:

Elastic::ESQL.from('sample_data').sort('@timestamp').asc.to_s
# => 'FROM sample_data | SORT @timestamp ASC'Elastic::ESQL.from('sample_data').sort('@timestamp').desc.nulls_first.to_s
# => 'FROM sample_data | SORT @timestamp DESC NULLS FIRST'

它还支持自定义 Strings,以防你想自己编写 ES|QL 查询,或使用库中尚未添加的功能。custom 会在查询末尾连接这些字符串。它会按传入函数时的形式添加,不会加入任何管道字符。它们会通过空格字符与查询的其他部分组合。

esql = Elastic::ESQL.from('sample_data')
esql.custom('| MY_VALUE = "test value"').to_s
# => 'FROM sample_data | MY_VALUE = "test value"'

你也可以链式调用自定义函数:

esql.custom('| MY_VALUE = "test value"').custom('| ANOTHER, VALUE')
'FROM sample_data | MY_VALUE = "test value" | ANOTHER, VALUE'

在 Ruby client 中使用 ES|QL 查询生成器

你可以通过将查询对象发送给 elasticsearch-ruby 和 esql.query API,直接使用查询生成器:

require 'elasticsearch'
require 'elastic/esql'client = Elasticsearch::Client.new
index = 'sample_data'query = Elastic::ESQL.from(index).sort('@timestamp').desc.where('event_duration > 5000000').limit(3).eval({ duration_ms: 'ROUND(event_duration/1000000.0, 1)' })
client.esql.query(body: { query: query })

你也可以将它与 Elasticsearch Ruby client 的 ES|QL Helper 一起使用,了解更多信息:

require 'elasticsearch/helpers/esql_helper'Elasticsearch::Helpers::ESQLHelper.query(client, query)

作为独立工具

这个 gem 设计为一个独立工具,以地道的方式构建 ES|QL 查询。它没有运行时依赖;你可以将它与官方 Elasticsearch Ruby client 一起使用,或者单独使用。

生成的查询可以通过 esql.query API 用于应用与 Elasticsearch API(无论是否使用 Ruby)的任何交互。一旦使用 elastic-esql 构建了查询,生成的 String 可以作为请求体中的 query 参数发送到 API。

我之前写过关于如何使用流行 Ruby 工具与 Elasticsearch 交互的文章。这个 gem 可以与任何流行的 Ruby 工具一起使用,通过 ES|QL 查询 Elasticsearch。

结论

这个库正在积极开发中,最终 API 尚未完成。目前它以技术预览版发布。如果你对当前 API 或一般使用有任何反馈,请随时提交新 issue。请参考 README 了解更多关于 Ruby ES|QL 查询生成器的信息。

原文:https://www.elastic.co/search-labs/blog/esql-query-builder-elasticsearch-ruby-client

http://www.dtcms.com/a/389693.html

相关文章:

  • 平安养老险陕西分公司积极开展“保障金融权益,助力美好生活”金融教育宣传周活动
  • 多线程的特点与同步、互斥锁
  • 将npm run dev 冷启动从 90s 优化到 8.5s的实践
  • 【附源码】基于SSM的小型银行贷款系统设计与实现
  • X-Forwarded-For
  • 中科大DSAI Lab团队多篇论文入选ICCV 2025,推动三维视觉与泛化感知技术突破
  • GitHub 上 Star 数量前 10 的开源项目管理工具
  • axios函数封装
  • NewSQL——核心原理与内部机制
  • 《从 0 到 1 打通网络服务任督二脉:域名、服务器与多站点配置全攻略》​
  • vue3学习日记(十七):动态路由使用解析
  • SpringBoot 启动流程
  • .NET驾驭Word之力:结构化文档元素操作
  • 解密F5负载均衡:优化网络性能的关键
  • 使用 .NET Core 6 Web API 的 RabbitMQ 消息队列
  • 时空预测论文分享:图时空注意力网络 ConvLSTM 时空演变
  • 千问大模型部署笔记
  • 网络:开源网络协议栈介绍
  • 设计模式(C++)详解—装饰器模式(3)
  • 双重锁的单例模式
  • 管理 Git 项目中子模块的 commit id 的策略
  • 跨境电商API数据采集的流程是怎样的?
  • rust编写web服务07-Redis缓存
  • 第三十三天:高精度运算
  • 写联表查询SQL时筛选条件写在where 前面和后面有啥区别
  • ARM(13) - PWM控制LCD
  • Python基础 3》流程控制语句
  • 牛客算法基础noob44——数组计数维护
  • 并发编程原理与实战(三十)原子操作进阶,原子数组与字段更新器精讲
  • 前端-详解Vue异步更新