Elasticsearch Query

2021. 8. 17. 19:39프로그래밍 개발(Development)/Elastic Stack(ELK)

반응형

Elasticsearch를 사용하다 보면 Query를 자주 사용하게 된다.

최근 버전에서는 SQL 구문이 사용 가능하지만, 일반적으로 자주 사용하는 몇가지 쿼리를 알아보자.

쿼리는 Kibana에서 사용시 나타내는 방식으로 작성 하였으며, curl or API 사용시에도 동일하게 사용된다.

 

※ 엘라스틱 버전은 5.4 버전 기반이며, 최근버전에서는 type값 없이 조회가 가능하다.


조회

조회시 match와 term을 주로 많이 사용하며, 두가지의 사용 방법과 차이점에 대해서 알아보겠습니다.

match 쿼리는 단어들이 최소 1개라도 들어 있다면 검색 결과에 포함 됩니다.

# must를 사용해 2개이상의 조건을 포함할 수 있다.
GET {index}/{type}/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "FIELD": "TEXT"
          }
        }
      ]
    }
  }
}

term 쿼리는 검색어와 일치하는 문서를 검색한다

GET {index}/{type}/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "FIELD": {
              "value": "VALUE"
            }
          }
        }
      ]
    }
  }
}

 

구간 조회

예를 들어 나이, 돈, 몸무게, 키, 날짜 등 사용자가 원하는 구간을 조회하는 방법이다.

gte key 값이 시작 지점이 되고, lte key 값이 끝 구간이라고 이해하면 된다.

GET {index}/{type}/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "range": {
            "FIELD": {
              "gte": 10,
              "lte": 20
            }
          },
          "match": {
            "FIELD": "TEXT"
          }
        }
      ]
    }
  }
}

정렬

특정 필드의 값에 따라 정렬된 형태로 조회를 한다.

asc : 오름차순, desc : 내림차순

GET {index}/{type}/_search
{
  "sort": [
    {
      "FIELD": {
        "order": "desc"
      }
    }
  ], 
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "FIELD": "TEXT"
          }
        }
      ]
    }
  }
}

데이터 삭제

특정 type의 모든 데이터를 삭제의 예시이다

POST {index}/{type}/_delete_by_query?conflicts=proceed
{
  "query": {
    "match_all": {}
  }
}

업데이트

POST {index}/{type}/{_esid}/_update
{
  "doc": {
    """
    Data
    """
  }
}

 

반응형