엘라스틱서치 Query String, Query DSL 문법 정리

URL 주소 뒤에 한 줄로 이어붙여서 쿼리문을 작성하는 쿼리 스트링보다
REST API 요청 본문 안에 JSON 형태로 쿼리를 작성하는 쿼리 DSL이 가독성 좋습니다.

키바나에서 쿼리 테스트 방법
좌측 메뉴 > Management > Dev Tools > Console에서 쿼리 DSL 실행 가능합니다.


클러스터 및 노드 관련 쿼리

클러스터 설정값 확인 쿼리

GET _cluster/settings?include_defaults=true

노드 설정값 확인 쿼리

GET _nodes/settings

인덱스 관련 쿼리

인덱스 세팅/매핑 정보 확인 쿼리

GET 인덱스명/_settings
GET 인덱스명/_mapping

인덱스 닫기, 열기 쿼리

POST 인덱스명/_close
POST 인덱스명/_open

닫힌 인덱스는 읽기/쓰기가 불가합니다.

샤드 수 지정하여 인덱스 생성 쿼리

PUT 인덱스명
{
  "settings": {
    "number_of_shards": 3, # 3개의 프라이머리 샤드
    "number_of_replicas": 2 # 3x2 = 6개의 레플리카 샤드
  }
}

인덱스 목록 확인 쿼리

GET _cat/indices

전체 Index 이름 및 Document 수 조회가 가능합니다.

인덱스 삭제 쿼리

DELETE 인덱스명

인덱스 필드 삭제 쿼리

POST 인덱스명/_update_by_query
{
  "script": {
    "inline": "ctx._source.remove('삭제필드명')"
  },
  "query": {
    "bool": {
      "must": {
        "exists": {
          "field": "삭제필드명"
        }
      }
    }
  }
}

인덱스에 도큐먼트 insert 쿼리

PUT 인덱스명/_doc/인덱스ID
{
  "필드명1": "데이터",
  "필드명2": "데이터2"
}

인덱스 리인덱싱 쿼리

POST _reindex
{
  "source": {
    "index": "기존인덱스명"
  },
  "dest": {
    "index": "신규인덱스명"
  }
}

기존 인덱스의 도큐먼트들을 신규 인덱스의 세팅/매핑에 적용하며 복사하는 쿼리입니다.
신규 인덱스명이 존재해도 에러 없이 리인덱싱 가능합니다.

인덱스 세팅/매핑 정보 변경 순서

  1. 새로운 세팅/매핑으로 기존 인덱스명에 적용될 인덱스 템플릿을 만듭니다.
  2. temp 인덱스로 리인덱싱합니다.
  3. 기존 인덱스 삭제 후 기존 인덱스명으로 다시 리인덱싱합니다.
  4. temp 인덱스를 삭제합니다.

도큐먼트 관련 쿼리

검색 쿼리

https://0songha0.github.io/elk/2022-08-16-1

도큐먼트 생성 쿼리

PUT 인덱스명/_doc/3
{
  "필드명1" : "데이터", "필드명2" : "데이터"
}

도큐먼트 일괄 생성 쿼리 (Bulk insert)

POST _bulk
{"index":{"_index":"인덱스명", "_id":"1"}}
{"필드명1" : "데이터", "필드명2" : "데이터"}
{"index":{"_index":"인덱스명", "_id":"2"}}
{"필드명1" : "데이터", "필드명2" : "데이터"}

또는

POST _bulk
{"create":{"_index":"인덱스명", "_id":"1"}}
{"필드명1" : "데이터", "필드명2" : "데이터"}
{"create":{"_index":"인덱스명", "_id":"2"}}
{"필드명1" : "데이터", "필드명2" : "데이터"}

도큐먼트 수정 쿼리

POST 인덱스명/_update/ID
{
  "doc": {
    "필드명1" : "데이터",
    "필드명2" : "데이터"
  }
}

조건에 맞는 도큐먼트 일괄 수정 쿼리

POST 인덱스명/_update_by_query
{
  "script": {
    "source": "ctx._source.필드명1 = '변경데이터'; ctx._source.필드명2 = '변경데이터';"
  },
  "query": {
    "match": {
      "검색필드명":"검색어"
    }
  }
}

도큐먼트 일괄 수정 쿼리 (Bulk update)

POST _bulk
{"update":{"_index":"인덱스명", "_id":"1"}}
{"doc" : {"필드명1" : "데이터", "필드명2" : "데이터"}}
{"update":{"_index":"인덱스명", "_id":"2"}}
{"doc" : {"필드명1" : "데이터", "필드명2" : "데이터"}}

도큐먼트 삭제 쿼리

DELETE 인덱스명/_doc/ID

도큐먼트 일괄 삭제 쿼리

POST 인덱스명/_delete_by_query
{
  "query": {
    "match_all": { } # 조건에 해당하는 도큐먼트
  }
}

도큐먼트 일괄 삭제 쿼리 (Bulk delete)

POST _bulk
{"delete":{"_index":"인덱스명", "_id":"1"}}
{"delete":{"_index":"인덱스명", "_id":"2"}}

Leave a comment