데이터베이스/ELK

[ELK] Elasticsearch DSL 기본 문법

츄르릅 2022. 12. 20. 01:39

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 인덱스를 삭제한다.