Elasticsearch에서 검색 인터페이스 고르기

Elasticsearch에서 검색 인터페이스 고르기

검색할 데이터와 검색 접근 방식이 정해졌다면, 이제 그 검색 로직을 어떻게 표현할지를 골라야 해요. Elasticsearch는 같은 검색을 여러 방식으로 표현할 수 있는데, 어떤 인터페이스를 쓰느냐에 따라 쿼리의 표현력과 구성 방식이 달라져요. 이 페이지에서는 세 가지 대표 인터페이스인 Query DSL, Retrievers, ES|QL을 각각 언제 쓰면 좋은지 비교하며 설명해요.

출처: 공식문서 — Build your search queries

세 가지 검색 인터페이스

Elasticsearch는 검색 로직을 표현하는 주된 인터페이스로 세 가지를 제공해요. 각각 엔드포인트와 특성이 달라서, 어떤 걸 써야 할지 먼저 표로 정리해 볼게요.

인터페이스 엔드포인트 설명
Query DSL _search Elasticsearch 고유의 JSON 기반 쿼리 언어예요. 표현력이 뛰어나고 모든 클라이언트 라이브러리에서 폭넓게 지원돼요.
Retrievers _search 단일 요청 안에서 다단계 검색 파이프라인을 조립할 수 있는 _search 문법이에요. Query DSL 위에 만들어졌어요.
ES|QL _query SQL과 비슷한 파이프 문법을 쓰는 쿼리 언어예요. 새 컴퓨팅 아키텍처 위에 만들어졌고, 전체 텍스트·시맨틱·하이브리드 검색과 재랭킹, 텍스트 생성까지 지원해요.

이 인터페이스들은 서로 배타적이지 않아요. 앱의 각 부분이 필요에 따라 다른 인터페이스를 골라 쓰면 되고, 요구가 바뀌면 점차 새 인터페이스로 옮겨 갈 수도 있어요.

언제 무엇을 고를까

Query DSL을 고를 때는 이런 요구가 있는 경우예요.

  • 개별 쿼리 절의 스코어링과 부스트를 세밀하게 제어하고 싶어요.
  • 생태계 지원이 최우선이에요. 모든 Elasticsearch 클라이언트·도구·통합이 Query DSL과 함께 동작해요.
  • match, bool, term 같은 단일 단계 쿼리만 있으면 돼요. 반드시 다단계 검색이 필요한 건 아니에요.

Query DSL은 가장 기본이 되는 쿼리 언어라, 단일 검색 전략을 쓸 때면 간단한 검색에는 언제나 무난한 선택이에요.

Retrievers를 고를 때는 이런 경우예요.

  • 한 번의 _search 호출로 다단계 검색 파이프라인을 조립하고 싶어요. 예를 들어 가져오고(retrieve), 재랭킹하고(rerank), 다양화(diversify)하는 흐름을요.
  • RRF나 선형 결합으로 여러 검색 전략을 합치고 싶어요.
  • text_similarity_reranker 리트리버로 시맨틱 재랭킹을 적용하고 싶어요.

Retrievers는 Query DSL을 감싸면서 조합성을 더해요. BM25와 벡터 검색을 섞거나 재랭킹 단계를 더한다면, 파이프라인 전체를 선언적으로 표현할 수 있어서 유리해요.

ES|QL을 고를 때는 이런 경우예요.

  • FORK/FUSE로 하이브리드 검색, RERANK로 재랭킹, COMPLETION으로 텍스트 생성까지 끌어 쓰는 종단 간 검색 쿼리를 만들고 싶어요.
  • 검색과 집계·통계 같은 데이터 변환을 한 쿼리에서 묶고 싶어요.
  • Kibana나 API에서 익숙한 SQL 형태로 데이터를 대화형으로 탐색하고 싶어요.

ES|QL은 검색을 넘어선 워크플로에 잘 맞아요. 한 파이프 쿼리에서 검색하고, 재랭킹하고, 요약까지 할 수 있으니까요.

기능별 지원 요약

기능 Query DSL Retrievers ES|QL
전체 텍스트 검색 (BM25)
시맨틱 / 벡터 검색
하이브리드 검색 (점수 결합) - 예 (RRF, linear) 예 (FORK/FUSE)
시맨틱 재랭킹 - 예 (text_similarity_reranker) 예 (RERANK)
결과 다양화 (MMR) - 예 (diversify) 예 (MMR)
멀티필드 쿼리 형식 - -
집계 (Aggregations)
텍스트 생성 (LLM) - - 예 (COMPLETION)
파이프 변환 - -

한 눈에 보면, 기본 검색과 세밀한 제어는 Query DSL, 다단계 파이프라인과 재랭킹은 Retrievers, 검색에 데이터 변환까지 더하는 종단 간 작업은 ES|QL이 담당한다고 정리할 수 있어요.

더 알아보기