Search API 개요

  • Elasticsearch의 **가장 핵심적인 기능은 검색(Querying)**입니다.
  • _search API는 인덱스 단위로 검색을 수행합니다.
  • 기본 사용법:
    GET <인덱스명>/_search
    
    • 쿼리를 입력하지 않으면 **모든 문서(match_all)**를 검색합니다.

URI 검색

  • _search?q=검색어 형식으로 간단한 검색이 가능합니다.
  • URI 검색의 장점
    • 웹 브라우저 주소창에서도 쉽게 사용 가능
    • 단순 검색에 적합

예제 1: 전체 인덱스에서 "value" 검색

GET test/_search?q=value
  • 결과 (hits.total.value에 검색된 문서 개수 표시)
    {
      "hits": {
        "total": { "value": 1 },
        "hits": [ {...} ]
      }
    }
    

예제 2: "value" AND "three" 검색

GET test/_search?q=value AND three
  • 설명
    • AND, OR, NOT 연산자 사용 가능 (대문자로 입력해야 함)
    • "value"와 "three"를 모두 포함하는 문서 검색

예제 3: 특정 필드에서 검색

GET test/_search?q=field:value
  • 설명
    • 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

🎯 추가 학습 추천

  1. 복합 쿼리(Query DSL - bool 쿼리)
    • 필터링과 랭킹을 조합한 강력한 검색 방식
  2. 검색 결과 정렬 및 페이징 (from, size)
  3. 어그리게이션(Aggregation) 사용법
  4. Highlighting (검색어 하이라이트)

 

+ Recent posts