介绍用于 Elasticsearch Ruby 客户端的 ES|QL 查询生成器
了解如何使用最近发布的用于 Elasticsearch Ruby 客户端的 ES|QL 查询生成器。这是一款使用 Ruby 代码更轻松地构建 ES|QL 查询的工具。
我们最近发布了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鲁比
Elastic::ESQL.from('sample_data').limit(2).sort('@timestamp').descending安装
该 gem 可通过以下方式从 RubyGems 安装:
gem install elastic-esql或者将其添加到项目的 Gemfile 中:
gem 'elastic-esql'使用方法
您可以一次性建立一个完整的查询,也可以使用from 或row 等源命令创建一个查询对象,然后使用 ES|QL 方法链在其上建立查询。
query = Elastic::ESQL.from('sample_data')
query.limit(2).sort('@timestamp')在to_s 方法中,gem 将代码转换为 ES|QL,因此在打印输出或转换为字符串时会返回 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'它还支持自定义字符串,以备您自己编写 ES|QL 查询或使用尚未添加到库中的功能。custom 会在查询结束时连接字符串。它将在发送到函数时添加这些字符,而不会添加任何管道字符。它们将通过一个空格字符与查询的其余部分合并。
esql = Elastic::ESQL.from('sample_data')
esql.custom('| MY_VALUE = "test value"').to_s
# => 'FROM sample_data | MY_VALUE = "test value"'您还可以将custom 功能串联起来:
esql.custom('| MY_VALUE = "test value"').custom('| ANOTHER, VALUE')
'FROM sample_data | MY_VALUE = "test value" | ANOTHER, VALUE'在 Ruby 客户端使用 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 客户端中的 ES|QL Helper 结合使用,了解更多详情:
require 'elasticsearch/helpers/esql_helper'
Elasticsearch::Helpers::ESQLHelper.query(client, query)作为独立工具
该 gem 被设计为一个独立工具,用于以惯用方式构建 ES|QL 查询。它没有运行时依赖性,可以与官方 Elasticsearch Ruby 客户端一起使用,也可以单独使用。
生成的查询可在esql.query API 中使用,无论应用程序以何种方式与 Elasticsearch API 交互(无论是否使用 Ruby)。使用elastic-esql 创建查询后,生成的字符串就可以作为query 请求正文中的参数发送给应用程序接口。
我曾写过一篇关于将 Elasticsearch 与流行的 Ruby 工具结合使用的文章。该 gem 可与任何流行的 Ruby 工具一起使用,以通过 ES|QL 查询 Elasticsearch。
结论
该库正在积极开发中,最终的应用程序接口尚未完成。目前发布的是技术预览版。如果您对当前的应用程序接口或一般使用方法有任何反馈,请随时打开新问题。有关 Ruby ES|QL 查询生成器的更多信息,请参阅README。




