Elasticsearch에서 검색 인터페이스 고르기
Elasticsearch에서 검색 인터페이스 고르기
검색할 데이터와 검색 접근 방식이 정해졌다면, 이제 그 검색 로직을 어떻게 표현할지를 골라야 해요. Elasticsearch는 같은 검색을 여러 방식으로 표현할 수 있는데, 어떤 인터페이스를 쓰느냐에 따라 쿼리의 표현력과 구성 방식이 달라져요. 이 페이지에서는 세 가지 대표 인터페이스인 Query DSL, Retrievers, ES|QL을 각각 언제 쓰면 좋은지 비교하며 설명해요.
세 가지 검색 인터페이스
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이 담당한다고 정리할 수 있어요.
더 알아보기
- _search API로 검색하기 — _search API의 동작과 공통 옵션
- 쿼리 DSL — JSON 기반 기본 쿼리 언어