-
엘라스틱서치 bluk api공부하기/엘라스틱서치 2024. 2. 27. 17:59
- 여러 색인, 업데이트, 삭제 작업을 한 번의 요청에 담아서 보내는 API
- 대량의 데이터를 색인할 때 많이 사용된다.
- 요청 본문이 JSON이 아니라 NDJSON 형태
- NDJSON : 여러 줄의 JSON을 줄바꿈 문자로 구분하여 요청을 보내는 형태
- 헤더 Content-Type 의 값을 application/json이 아닌 application/x-ndjson으로 요청을 보내야한다.
- 줄바꿈 문자 \n으로 끝나야한다.
- 첫 줄은 요청의 종류와 인덱스, _id, 라우팅 등을 지정한다
- 추가적인 요청 본문을 필요로 하는 경우 다음 줄에 이어서 기재한다
- 따라서 요청 하나의 크기는 1줄~2줄이 된다.
- 단건 문서를 여러번 요청하는것보다 bulk API로 한번에 요청하는것이 성능상 대부분 좋다.
- http 요청을 청크(chunked)로 보내는 것은 성능상 좋지 않아 피해야한다.
기본 문법
POST _bulk ... POST 인덱스이름/_bulk -> 기본 인덱스를 지정하여 요청
bulk 기본 예제 실습
request
POST _bulk { "index" : { "_index" : "test", "_id" : "1" } } { "field1" : "value1" } { "delete" : { "_index" : "test", "_id" : "2" } } { "create" : { "_index" : "test", "_id" : "3" } } { "field1" : "value3" } { "update" : {"_id" : "1", "_index" : "test"} } { "doc" : {"field2" : "value2"} } { "index":{"_index": "test", "_id": "4", "routing": "lsm" }} { "filed1": "value4" }
- index, create는 색인 요청
- 다음 줄은 색인할 문서의 _source
- 다음줄에 doc 또는 script를 기술하여 업데이트할 수 있음
response
{ "took": 1877, "errors": false, "items": [ { "index": { "_index": "test", "_id": "1", "_version": 1, "result": "created", "_shards": { "total": 2, "successful": 1, "failed": 0 }, "_seq_no": 0, "_primary_term": 1, "status": 201 } }, { "delete": { "_index": "test", "_id": "2", "_version": 1, "result": "not_found", "_shards": { "total": 2, "successful": 1, "failed": 0 }, "_seq_no": 1, "_primary_term": 1, "status": 404 } }, { "create": { "_index": "test", "_id": "3", "_version": 1, "result": "created", "_shards": { "total": 2, "successful": 1, "failed": 0 }, "_seq_no": 2, "_primary_term": 1, "status": 201 } }, { "update": { "_index": "test", "_id": "1", "_version": 2, "result": "updated", "_shards": { "total": 2, "successful": 1, "failed": 0 }, "_seq_no": 3, "_primary_term": 1, "status": 200 } }, { "index": { "_index": "test", "_id": "4", "_version": 1, "result": "created", "_shards": { "total": 2, "successful": 1, "failed": 0 }, "_seq_no": 4, "_primary_term": 1, "status": 201 } } ] }
- 응답을 확인해보면 요청의 순서대로 items 배열에 응답이 있는걸 확인할 수 있다.
- 동일한 인덱스, _id, 라우팅 조합을 가진 요청은 반드시 동일한 주 샤드로 넘어가기 때문에 순서보장
- 동일하지 않은 인덱스에 요청할 시 순서가 보장되지 않음
- items 배열의 각 응답은 status 상태코드를 갖는다.
'공부하기 > 엘라스틱서치' 카테고리의 다른 글
엘라스틱서치 multi get api (0) 2024.02.28 엘라스틱서치 삭제 API (0) 2024.02.26 엘라스틱서치 업데이트 API [script] (0) 2024.02.26 엘라스틱서치 업데이트 API [doc] ( detect_noop, doc_as_upsert ) (0) 2024.02.25 엘라스틱서치 조회 API (0) 2024.02.25