참고한 서적📚 : 시작하세요! 엘라스틱 서치
엘라스틱 서치에서는 여러 명령을 한꺼번에 실행할 수 있는 배치 작업을 위한 벌크 API를 제공한다.
입력할 데이터를 모아 한꺼번에 처리하므로 데이터를 각각 처리하고 결과를 반환할 때보다 속도가 매우 빠르다.
특히 많은 도큐먼트를 한꺼번에 색인할 때 벌크를 사용하면 색인에 소요되는 시간을 크게 줄일 수 있다.
벌크(Bulk) API의 요청은 크게 index, create, delete, update 4가지 동작을 처리한다.
delete를 제외한 index, create, update 동작은 실행 메타 정보와 요청 데이터가 각각 한 쌍씩 묶여 동작한다.
실행을 할 때는 POST 요청으로 host:port/_bulk
요청을 주면 된다!
실행 메타 정보는
{"동작" : {"_index": 인덱스, "_type": 타입,"_id": 도큐먼트 id}}
형식으로 입력한다.
둘 다 데이터를 입력하는 명령어지만 아래와 같은 차이가 있다.
{"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}} <- 요청 데이터
벌크 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}} <- 요청 데이터