상위: Elasticsearch
요약
Elasticsearch의 검색 API는 URI 검색과 Request Body 검색(Query DSL) 두 가지 방식을 지원합니다.
검색 동작 원리
- 클라이언트가 Coordinating Node에 요청.
- Coordinating Node가 관련 샤드(Primary or Replica)에 요청 분산.
- 각 샤드가 검색 수행 후 결과(ID, Score) 반환.
- Coordinating Node가 결과 취합, 정렬, 상세 정보 조회(Fetch) 후 클라이언트에 응답.
URI Search
- URL 쿼리 스트링에 검색 조건을 포함합니다.
- 장점: 간단하고 빠름.
- 단점: 복잡한 쿼리 표현 불가.
- 예시:
GET /products/_search?q=brand:Samsung
Request Body Search
- JSON 본문에 쿼리를 작성합니다 (Query DSL).
- 장점: 복잡하고 정교한 쿼리 가능.
- 예시:
GET /products/_search
{
"query": {
"match": { "brand": "Samsung" }
}
}
주요 파라미터
검색 파라미터
| 파라미터 | 기본값 | 설명 |
|---|---|---|
| q | - | 검색할 쿼리 문자열 |
| df | - | 기본 검색 필드 지정 |
| analyzer | - | 분석기 지정 |
| default_operator | OR | 검색어 간 기본 연산자 (AND/OR) |
결과 조정 파라미터
| 파라미터 | 기본값 | 설명 |
|---|---|---|
| _source | true | 전체 필드 표시 여부 |
| sort | - | 정렬 기준 설정 |
| from | 0 | 시작 문서 지정 (페이지네이션) |
| size | 10 | 검색 결과 개수 제한 |
검색 결과 구조
{
"took": "실행 시간(ms)",
"_shards": {
"total": "전체 샤드 수",
"successful": "성공한 샤드 수"
},
"hits": {
"total": "검색된 문서 수",
"max_score": "최고 점수",
"hits": [ ... ]
}
}
멀티테넌시 (Multi-tenancy)
여러 인덱스를 동시에 검색할 수 있습니다.
GET products,services/_search
{
"query": { "match_all": {} }
}
활용:
- 날짜별 인덱스 분리 → 검색 범위 최소화
- 로그/트래픽 등의 시계열 데이터에 적합