Blog

Apresentamos o construtor de consultas ES|QL para o cliente Ruby do Elasticsearch.

Aprenda a usar o construtor de consultas ES|QL recém-lançado para o cliente Ruby do Elasticsearch. Uma ferramenta para criar consultas ES|QL mais facilmente com código Ruby.

Recentemente lançamos elastic-esql, uma gem Ruby publicada sob a licença Apache 2. Esta gem permite que você crie consultas ES|QL da Elastic em Ruby idiomático, que você pode então usar com a API de consulta ES|QL. O ES|QL permite que os desenvolvedores filtrem, transformem e analisem dados armazenados no Elasticsearch por meio de consultas. Ele usa "pipes" ( | ) para trabalhar com os dados passo a passo. A gem usa funções Ruby, que você pode encadear ao objeto original para construir consultas mais complexas:

ESQL:

FROM sample_data | LIMIT 2 | SORT @timestamp DESC

Rubi:

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

Instalação

A gem pode ser instalada a partir do RubyGems com o seguinte comando:

gem install elastic-esql

Ou pode ser adicionado ao Gemfile de um projeto:

gem 'elastic-esql'

Uso

Você pode construir uma consulta completa de uma só vez ou criar um objeto de consulta com um comando de origem como from ou row e, em seguida, encadear métodos ES|QL para construí-lo.

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

A gem traduz o código para ES|QL no método to_s , portanto, retorna a consulta ES|QL quando é impressa ou convertida em uma String:

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

Você pode instanciar um objeto de consulta e modificar seu estado inicial usando os equivalentes ! de cada função:

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"

A ferramenta fornece maneiras convenientes de encadear etapas extras a uma função ES|QL, como enrich e sort. Depois de chamar enrich em um objeto Elastic::ESQL , você pode encadear on e with a ele:

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

Você também pode encadear desc, asc, nulls_first e nulls_last à sua consulta após usar sort:

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'

Também oferece suporte a strings personalizadas, caso você queira escrever a consulta ES|QL por conta própria ou usar um recurso que ainda não foi adicionado à biblioteca. custom irá unir as strings no final da consulta. Isso os adicionará conforme forem enviados para a função, sem adicionar nenhum caractere de barra vertical. Eles serão combinados ao restante da consulta por um caractere de espaço.

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

Você também pode encadear funções custom :

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

Utilizando o Construtor de Consultas ES|QL com o cliente Ruby

Você pode usar o construtor de consultas diretamente com elasticsearch-ruby e a API esql.query enviando o objeto de consulta:

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 })

Você também pode usá-lo com o auxiliar ES|QL do cliente Ruby do Elasticsearch. Saiba mais:

require 'elasticsearch/helpers/esql_helper'

Elasticsearch::Helpers::ESQLHelper.query(client, query)

Como uma ferramenta independente

A gem foi projetada como uma ferramenta independente para construir consultas ES|QL de forma idiomática. Não possui dependências de tempo de execução; você pode usá-lo com o cliente oficial do Elasticsearch para Ruby ou de forma independente.

A consulta gerada pode ser usada com a API esql.query de qualquer forma que um aplicativo interaja com a API do Elasticsearch (Ruby ou não). Uma vez que uma consulta é construída com elastic-esql, a String gerada pode ser enviada para a API como o parâmetro query no corpo da solicitação.

Anteriormente, escrevi sobre como usar o Elasticsearch com ferramentas populares do Ruby. Esta gem pode ser usada com qualquer uma das ferramentas populares do Ruby para consultar o Elasticsearch com ES|QL.

Conclusão

Esta biblioteca está em desenvolvimento ativo e a API final ainda não foi concluída. Atualmente, está disponível em versão de pré-visualização técnica. Se você tiver algum comentário sobre a API atual ou sobre o uso em geral, não hesite em abrir uma nova solicitação. Consulte o arquivo README para saber mais sobre o construtor de consultas Ruby ES|QL.

Conteúdo relacionado

LINQ para Elasticsearch ES|QL: escreva Consultas em C# e Consulte o Elasticsearch

Florian Bernd

Pesquisa geoespacial do Elasticsearch com ES|QL

Craig Taverner

Estatísticas ES|QL mais rápidas com tabelas hash no estilo Swiss Tables

Chris Hegarty

Introdução do suporte ao Elasticsearch no Google MCP Toolbox for Databases

Enrico Zimuel

Ingerir dados geoespaciais no Elasticsearch com o Kibana para uso no ES|QL

Craig Taverner

Pronto para criar buscas de última geração?

Uma pesquisa suficientemente avançada não se consegue apenas com o esforço de uma só pessoa. O Elasticsearch é impulsionado por cientistas de dados, especialistas em operações de aprendizado de máquina, engenheiros e muitos outros que são tão apaixonados por buscas quanto você. Vamos nos conectar e trabalhar juntos para construir a experiência de busca mágica que lhe trará os resultados desejados.

Experimente você mesmo(a)