글 작성자: nouu

http://www.yes24.com/Product/Goods/103030516

 

엘라스틱 스택 개발부터 운영까지 - YES24

데이터를 처리하는 데 서로 잘 맞지도 않는 오픈소스 기술들을 굳이 동원해야 할까? 제각각인 오픈소스들을 통합하고 운영하느라 지친 개발자와 운영자들을 위한 솔루션! 이제 엘라스틱 스택

www.yes24.com

 

해당 서적을 참고하여 작성하였습니다. 

 

 

 

데이터의 CRUD 동작을 할 때 REST API를 호출하여 하나 하나 도큐먼트를 요청하는 것 보다 벌크로 한번에 요청하는 것이 효율적이다. 즉, API 한번 호출하여 20개의 도큐먼트를 인덱싱하면 훨씬 빠르고 경제적이다. 엘라스틱서치는 bulk API를 지원한다. 

 

위의 이미지와 같이 벌크 api를 사용하면 다음과 같이 등록된다.

POST _bulk

{"index": {"_index": "index2", "_id": "8"}}  # "index"필드명은 index2로 해줘, document id는 8로 해줘. 

{"name": "park", "age": 30, "gender": "female"}  # index2의 id8의 구성은 "name" : "park", "age": 30, "gender": "female"로 해줘 

{"index": {"_index": "index2", "_id": "9"}}  # "index"필드명은 index2로 해줘, document id는 9로 해줘. 

{"name": "jung", "age": 50, "gender": "male"}  # index2의 id9의 구성은 "name" : "jung", "age" : 50, "gender" : "male"로 해줘

 

이와같이 벌크로 하나의 인덱스에 2개 이상의 도큐먼트를 한번에 인덱싱 할수 있다.

 

방금전과 같이 키바나 콘솔을 이용하여 벌크 데이터를 입력했지만 실제 현업에서는 파일을 통해서 벌크 api를 사용한다. 

 

 

위와 같이 vim을 이용하여 벌크 데이터를 만들었다. 이제 curl 명령을 이용하여 bulk API를 실행해보자. 

 

 

 

curl -H "Content-Type: application/x-ndjson" -XPOST localhost:9200/_bulk --data-binary "@bulk_index2";

 

-H 헤더의 옵션은 NDJSON 타입 형태로 사용하겠다는 뜻이며, -X는 요청 메소드를 기술한다. 즉, 위의 명령어를 통해 POST 메소드를 사용한 것을 알 수있다. localhost:9200은 엘라스틱서치가 동작하는 호스트 주소이며, /_bulk는 bulk api를 호출하는 것이다. 마지막으로 --data-binary는 POST 메소드에 우리가 만든 파일을 바이너리 형태로 전송해주는 파라미터이다. 

 

마지막으로 위아 같이 벌크 api 요청 데이터 포맷은 JSON 구조를 줄바꿈 문자열로 구분하는 NDJSON 문법이다. 즉, 가독성 때문에 읽기 쉽게 인덴트를 하여 JSON 포맷팅 하는 경우가 많은데, 이럴 경우에 동작하지 않는다는 점을 주의 해야 한다.