블로그

Elasticsearch Ruby 클라이언트를 위한 ES|QL 쿼리 빌더 소개

최근 출시된 Elasticsearch Ruby 클라이언트용 ES|QL 쿼리 빌더를 사용하는 방법을 알아보세요. 루비 코드로 ES|QL 쿼리를 더 쉽게 작성할 수 있는 도구입니다.

Elasticsearch를 직접 체험해 보세요. Elasticsearch Labs 리포지토리의 샘플 노트북을 살펴보거나, 무료 클라우드 체험을 시작해 보세요. 지금 바로 로컬 컴퓨터에서 Elastic을 사용해 보셔도 좋습니다.

최근에 Apache 2 라이선스에 따라 게시된 루비 보석( elastic-esql)을 출시했습니다. 이 보석을 사용하면 관용적 Ruby로 Elastic의 ES|QL 쿼리를 빌드한 다음 ES|QL 쿼리 API와 함께 사용할 수 있습니다. ES|QL을 사용하면 개발자가 쿼리를 통해 Elasticsearch에 저장된 데이터를 필터링, 변환, 분석할 수 있습니다. "파이프" ( | )를 사용하여 단계별로 데이터를 작업합니다. 이 보석은 대신 Ruby 함수를 사용하며, 이를 원래 객체에 연결하여 더 복잡한 쿼리를 만들 수 있습니다:

ESQL:

FROM sample_data | LIMIT 2 | SORT @timestamp DESC

Ruby:

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

설치

이 젬은 루비젬스에서 다음을 사용하여 설치할 수 있습니다:

gem install elastic-esql

또는 프로젝트의 젬파일에 추가할 수도 있습니다:

gem 'elastic-esql'

사용법

전체 쿼리를 한 번에 빌드하거나 from 또는 row 같은 소스 명령으로 쿼리 개체를 만든 다음 ES|QL 메서드를 체인으로 연결하여 빌드할 수 있습니다.

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

겜은 to_s 메서드에서 코드를 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"

이 도구는 enrich 및 sort 과 같은 추가 단계를 ES|QL 함수에 연결하는 편리한 방법을 제공합니다. 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'

루비 클라이언트와 함께 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 도우미와 함께 사용할 수도 있으며, 자세히 알아보세요:

require 'elasticsearch/helpers/esql_helper'

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

독립형 도구로서

이 보석은 관용적인 방식으로 ES|QL 쿼리를 작성하는 독립형 도구로 설계되었습니다. 런타임 종속성이 없으므로 공식 Elasticsearch Ruby 클라이언트와 함께 사용하거나 단독으로 사용할 수 있습니다.

생성된 쿼리는 애플리케이션이 Elasticsearch API와 상호 작용하는 모든 방식(Ruby 여부에 관계없이)으로 esql.query API와 함께 사용할 수 있습니다. elastic-esql 으로 쿼리를 작성하면 생성된 문자열을 요청 본문에 query 매개변수로 API에 전송할 수 있습니다.

이전에 인기 있는 Ruby 도구와 함께 Elasticsearch를 사용하는 방법에 대한 글을 쓴 적이 있습니다. 이 보석은 널리 사용되는 모든 Ruby 도구와 함께 ES|QL로 Elasticsearch를 쿼리하는 데 사용할 수 있습니다.

결론

이 라이브러리는 현재 개발 중이며 최종 API는 아직 완성되지 않았습니다. 현재 기술 프리뷰 버전으로 출시되었습니다. 현재 API 또는 일반적인 사용법에 대한 피드백이 있으시면 주저하지 마시고 새 이슈를 개설해 주세요. 루비 ES|QL 쿼리 빌더에 대해 자세히 알아보려면 README를 참조하세요.

이 콘텐츠가 얼마나 도움이 되었습니까?

관련 콘텐츠

인덱싱하지 않은 데이터에 풀텍스트 검색을 제공하는 Elasticsearch ES|QL

인덱싱하지 않은 데이터에 풀텍스트 검색을 제공하는 Elasticsearch ES|QL

Kevin Corcoran
1분 만에 프롬프트로 대시보드 완성, 비용은 5분의 1: Kibana의 AI 대시보드와 맞춤형 Vega-Lite 차트

1분 만에 프롬프트로 대시보드 완성, 비용은 5분의 1: Kibana의 AI 대시보드와 맞춤형 Vega-Lite 차트

Marta Bondyra
LINQ to Elasticsearch ES|QL: C# 작성, Elasticsearch 쿼리

LINQ to Elasticsearch ES|QL: C# 작성, Elasticsearch 쿼리

Florian Bernd
스위스식 해시 테이블을 사용한 더 빠른 ES|QL 통계 처리

스위스식 해시 테이블을 사용한 더 빠른 ES|QL 통계 처리

Chris Hegarty
Google MCP Toolbox for Databases, 새롭게 추가된 Elasticsearch 지원

Google MCP Toolbox for Databases, 새롭게 추가된 Elasticsearch 지원

Enrico Zimuel

최첨단 검색 환경을 구축할 준비가 되셨나요?

충분히 고급화된 검색은 한 사람의 노력만으로는 달성할 수 없습니다. Elasticsearch는 여러분과 마찬가지로 검색에 대한 열정을 가진 데이터 과학자, ML 운영팀, 엔지니어 등 많은 사람들이 지원합니다. 서로 연결하고 협력하여 원하는 결과를 얻을 수 있는 마법 같은 검색 환경을 구축해 보세요.