본문 바로가기

데이터베이스/ELK

[ELK] Elasticsearch DSL 기본 문법

0. DSL

DSL이란 Domain Specific Language으로 JSON에 기반한 질의이다. ES에서의 DSL은 데이터베이스의 SQL문과 동일하다고 이해하면 된다. 즉, 사용자가 원하는 데이터를 추출하기 위한 질의 언어이다.

 

URL 주소 뒤에 한 줄로 이어붙여서 쿼리문을 작성하는 쿼리 스트링보다

REST API 요청 본문 안에 JSON 형태로 쿼리를 작성하는 DSL이 가독성이 더 좋다.

-> URL로 요청하는 쿼리문은 보통 간단하게 테스트용으로 자주 쓰인다.

 

좌측 메뉴 > Management > Dev Tools > Console에서 쿼리 DSL 실행 가능

 

1. 기본 쿼리

기본적으로 백엔드 API 개발할 때 사용하는 method와 유사하지만 기능은 조금 다르다.

GET은 REST method 처럼 무언가를 조회하는 역할이다.

POST는 무언가를 수정하는 역할이다.

PUT은 무언가를 생성하는 역할을 한다.

 

 

클러스터 설정값 확인 쿼리

GET _cluster/settings?include_defaults=true

 

노드 설정값 확인 쿼리

GET _nodes/settings

 

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

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

 

인덱스 닫기, 열기 쿼리

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

인덱스 설정 수정하기 원할 때, 인덱스 읽기/쓰기가 가능하게 open해주고 변경사항이 끝났다면 close한다.

 

샤드 수 지정하여 Index 생성 쿼리

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

 

Index 리스트 확인 쿼리

GET _cat/indices

 

index 확인 쿼리

GET 인덱스명

 

Index 삭제 쿼리

DELETE 인덱스명

 

Index에 document insert 쿼리

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

 

Index 리인덱싱 쿼리

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

리인덱싱 쿼리는 기존 인덱스의 도큐먼트들을 신규 인덱스의 세팅, 매핑에 적용하며 복사하는 쿼리이다.

 

인덱스 세팅, 매핑 정보 변경 시

1. 새로운 세팅, 매핑으로 기존 인덱스명에 적용될 인덱스 템플릿을 만든다.

2. temp 인덱스로 리인덱싱한다.

3. 기존 인덱스 삭제 후 기존 인덱스명으로 다시 리인덱싱 한다.

4. temp 인덱스를 삭제한다.