[ElasticSearch] 벌크(_bulk) API를 이용한 배치 작업

Hyebin Lee·2022년 4월 14일
0

ElasticSearch

목록 보기
3/9

참고한 링크(문헌)

참고한 서적📚 : 시작하세요! 엘라스틱 서치

엘라스틱 서치에서는 여러 명령을 한꺼번에 실행할 수 있는 배치 작업을 위한 벌크 API를 제공한다.
입력할 데이터를 모아 한꺼번에 처리하므로 데이터를 각각 처리하고 결과를 반환할 때보다 속도가 매우 빠르다.
특히 많은 도큐먼트를 한꺼번에 색인할 때 벌크를 사용하면 색인에 소요되는 시간을 크게 줄일 수 있다.

벌크(Bulk)의 형태

벌크(Bulk) API의 요청은 크게 index, create, delete, update 4가지 동작을 처리한다.
delete를 제외한 index, create, update 동작은 실행 메타 정보와 요청 데이터가 각각 한 쌍씩 묶여 동작한다.
실행을 할 때는 POST 요청으로 host:port/_bulk 요청을 주면 된다!

실행 메타 정보

실행 메타 정보는

{"동작" : {"_index": 인덱스, "_type": 타입,"_id": 도큐먼트 id}} 

형식으로 입력한다.

index와 create 동작의 차이

둘 다 데이터를 입력하는 명령어지만 아래와 같은 차이가 있다.

  • index : 기존에 도큐먼트가 존재하면 입력하는 데이터로 기존 도큐먼트를 덮어쓰게 된다.
  • create: 기존에 도큐먼트가 존재하면 입력 오류가 발생한다.

요청 데이터

{"index" : {"_index": "books", "_type": "book","_id": 1}}  <- 실행메타 정보
{"title" : "제목" , "author":"저자"}  <- 요청 데이터 
{"index" : {"_index": "books", "_type": "book","_id": 2}}  <- 실행메타 정보
{"title" : "제목2" , "author":"저자2"}  <- 요청 데이터 
{"update" : {"_index": "books", "_type": "book","_id": 1}} <- 실행메타 정보
{"doc" : {"page": 100}}  <- 요청 데이터 

URI에 인덱스와 타입 수준까지 명시하기

벌크 API를 사용할 때 URI에 인덱스, 타입 수준까지 명시하면 벌크 데이터의 실행 메타 정보에 인덱스, 타입을 생략할 수 있다.
URI에 인덱스 수준까지 명시하면 벌크 데이터의 실행 메타 정보에 타입과 id만 명시하면 된다.

  • host:port/books/book/_bulk 요청
{"index" : {"_id": 1}}  <- 실행메타 정보
{"title" : "제목" , "author":"저자"}  <- 요청 데이터 
{"index" : {"_id": 2}}  <- 실행메타 정보
{"title" : "제목2" , "author":"저자2"}  <- 요청 데이터 
{"update" : {"_id": 1}} <- 실행메타 정보
{"doc" : {"page": 100}}  <- 요청 데이터 

0개의 댓글