ElasticSearch로 Bulk 작업 수행하기

0

한번에 많은 document를 index에 올리려면 어떻게 해야할까?
_bulk 옵션을 이용해야한다.

따라서 이번에는 REST 쿼리와 JSON 형식을 사용하여 많은 문서를 한 번에 가져오는
방법을 살펴보겠다.

먼저 우리는 홈 디렉터리에서 다음과 같은 내용을 갖는 파일을 만들어야한다.

{ "create" : { "_index": "movies", "_id": "135569" } }
{ "id": "135569", "title": "Star Trek Beyond", "year": 2016, "genre": ["Action", "Adventure", "Sci-Fi"] }
{ "create" : { "_index": "movies", "_id": "122886" } }
{ "id": "122886", "title": "Star Wars: Episode VII", "year": 2015, "genre": ["Action", "Adventure", "Fantasy", "Sci-Fi"] }
{ "create" : { "_index": "movies", "_id": "109487" } }
{ "id": "109487", "title": "Interstellar", "year": 2014, "genre": ["IMAX", "Sci-Fi"] }
{ "create" : { "_index": "movies", "_id": "58559" } }
{ "id": "58559", "title": "Dark Knight", "year": 1959, "genre": ["Horror", "Sci-Fi"] }

포괄적인 하나의 JSON 요청이 아닌 각 줄을 이런 식으로 분리하는 이유는 따로있다. 이전 강좌를 통해 Elasticsearch는 모든 특정 문서를 주어진 샤드로 해시한다는 것을 기억할 것이다.

Elasticsearch는 개별 문서를 한 번에 하나씩 처리한다.
예로, 각 줄을 읽으며 영화 ID 1355569를 어떤 샤드로 매핑해야 할지를 정한다.
그다음 클러스터 내의 그 샤드에 정보를 넘겨준다.
그리고 다음 줄을 처리하며 이번에는 다른 샤드로 보내고, 다음에는 또 다른 노드로 넘긴다.

Elasticsearch 서버에 어떤 문서를 어떤 샤드로 보내서 처리할지 한 번에 전부 다 처리하지 않고 한 번에 한 줄씩 전달한다. 이것이 이러한 양식의 의도이다.

하지만 우리는 이것을 일일이 입력할 필요는 없다.(다행..)

wget http://media.sundog-soft.com/es7/movies.json

위 명령어를 실행하면 아까 보여준 데이터가 담긴 파일을 다운로드 받을 수 있다.

cat movies.json

또 위와 같은 명령어를 통해 다운 받은 파일의 명령어를 확인할 수 있다.
이제 터미널에서 아래 명령어를 입력해 벌크 작업을 수행하면 된다.

curl -XPUT 127.0.0.1:9200/_bulk?pretty --data-binary @movies.json

이후 아래 명령어를 통해 많은 문서들이 색인에 잘 들어갔는지 확인하면 끝이다.

curl -XGET 127.0.0.1:9200/movies/_search?pretty 
profile
Software engineer who is interested in server development, computer vision, and soccer

0개의 댓글