Search API 개요
- Elasticsearch의 **가장 핵심적인 기능은 검색(Querying)**입니다.
- _search API는 인덱스 단위로 검색을 수행합니다.
- 기본 사용법:
GET <인덱스명>/_search
- 쿼리를 입력하지 않으면 **모든 문서(match_all)**를 검색합니다.
URI 검색
- _search?q=검색어 형식으로 간단한 검색이 가능합니다.
- URI 검색의 장점
- 웹 브라우저 주소창에서도 쉽게 사용 가능
- 단순 검색에 적합
✅ 예제 1: 전체 인덱스에서 "value" 검색
GET test/_search?q=value
✅ 예제 2: "value" AND "three" 검색
GET test/_search?q=value AND three
- 설명
- AND, OR, NOT 연산자 사용 가능 (대문자로 입력해야 함)
- "value"와 "three"를 모두 포함하는 문서 검색
✅ 예제 3: 특정 필드에서 검색
GET test/_search?q=field:value
⚠ URI 검색의 한계
- 복잡한 검색 불가능 (예: 여러 개의 필드 조합, 필터링)
- Query DSL보다 기능이 제한적
- 권장: 단순 검색에만 사용하고, 복잡한 검색은 Query DSL 사용
데이터 본문(Data Body) 검색
- Elasticsearch의 Query DSL을 이용한 검색 방식
- JSON 형식의 검색 쿼리를 사용하며, 보다 강력한 검색 기능 제공
✅ 예제 1: match 쿼리 (기본 검색)
GET test/_search
{
"query": {
"match": {
"field": "value"
}
}
}
- 설명
- "field" 필드에서 "value"를 검색
- match 쿼리는 자연어 검색에 적합 (부분 일치 가능)
✅ 예제 2: match_all (전체 문서 조회)
GET test/_search
{
"query": {
"match_all": {}
}
}
- 설명: 모든 문서를 검색 (특정 조건 없이 전체 조회)
✅ 예제 3: 특정 필드에서 여러 키워드 검색
GET test/_search
{
"query": {
"bool": {
"must": [
{ "match": { "field1": "value1" } },
{ "match": { "field2": "value2" } }
]
}
}
}
- 설명
- "field1"에서 "value1"을 찾고
- "field2"에서 "value2"도 함께 검색
- AND 조건 검색
멀티테넌시 (Multitenancy)
- 여러 개의 인덱스를 한 번에 검색할 수 있음
- **주로 로그 데이터 분석(Log Analysis)**에 사용됨
✅ 예제 1: 쉼표(,)로 여러 인덱스 검색
GET logs-2018-01,logs-2018-02/_search
- "logs-2018-01" 과 "logs-2018-02" 인덱스에서 검색
✅ 예제 2: 와일드카드(*)를 이용한 다중 인덱스 검색
GET logs-2018-*/_search
- "logs-2018-"로 시작하는 모든 인덱스에서 검색
✅ 예제 3: 모든 인덱스에서 검색 (_all)
GET _all/_search
- ⚠ 주의: _all은 시스템 부하를 초래할 수 있음
- Elasticsearch 클러스터 내의 모든 인덱스를 검색하므로, 대량 데이터 환경에서는 권장되지 않음
- 특정 인덱스 패턴을 지정하는 것이 좋음
Search API 정리
기능 |
방법 |
예제 |
전체 검색 (match_all) |
Query DSL |
GET test/_search {"query": {"match_all": {}}} |
단순 검색 (URI 검색) |
_search?q=검색어 |
GET test/_search?q=value |
특정 필드 검색 |
_search?q=필드:검색어 |
GET test/_search?q=field:value |
match 쿼리 (부분 검색 가능) |
Query DSL |
GET test/_search {"query": {"match": {"field": "value"}}} |
AND 조건 검색 |
URI 검색 |
GET test/_search?q=value AND three |
여러 개의 인덱스 검색 (쉼표) |
_search |
GET logs-2018-01,logs-2018-02/_search |
여러 개의 인덱스 검색 (와일드카드) |
_search |
GET logs-2018-*/_search |
모든 인덱스 검색 (_all) |
_search |
GET _all/_search |
🎯 추가 학습 추천
- 복합 쿼리(Query DSL - bool 쿼리)
- 검색 결과 정렬 및 페이징 (from, size)
- 어그리게이션(Aggregation) 사용법
- Highlighting (검색어 하이라이트)