데이터 CRUD 동작을 할 때, REST API를 호출해 하나하나 도큐먼트를 요청하는 것보다
벌크로 한번에 요청하는 것이 효율적입니다.
POST _bulk
{"index" : {"_index": "mydoc", "_id": "1"}}
{"field_test": "test", "field_test2": "test"}
{"create" : {"_index": "mydoc", "_id": "2"}}
{"field_test": "test", "field_test2": "test"}
{"update": {"_id" : "2", "_index": "mydoc"}}
{"doc": { "field_test" : "update"}}
{"delete": {"_index": "mydoc", "_id": "1"}}
위와 같이 bulk API 포맷을 작성하여 조회를 제외한 생성, 수정, 삭제가 가능합니다.
각 줄 사이에는 별도의 구분자가 없고 라인 사이 공백을 허용하지 않습니다.
그래서 위 포맷의 결과는 아래와 같습니다.
2번 줄에서, mydoc 인덱스의 ID가 1인 도큐먼트를 {"field_test": "test", "field_test2": "test"}의 필드에 값을 가지도록 생성
4번줄에서, mydoc 인덱스의 ID가 2인 도큐먼트를 {"field_test": "test", "field_test2": "test"}의 필드에 값을 가지도록 생성
(create는 덮어쓰기를 허용하지 않습니다. 도큐먼트가 존재할 경우 error반환)
6번줄에서, mydoc 인덱스의 ID가 2인 도큐먼트를 {"field_test": "update"}의 필드에 값을 가지도록 수정
8번줄에서, mydoc 인덱스의 ID가 1인 도큐먼트를 삭제
추가적으로 벌크데이터를 파일 형태로 만들어서 적용하는 방법도 있습니다.
{"index" : {"_index": "mydoc", "_id": "11"}}
{"field_test": "test", "field_test2": "test"}
{"create" : {"_index": "mydoc", "_id": "12"}}
{"field_test": "test", "field_test2": "test"}
{"update": {"_id" : "12", "_index": "mydoc"}}
{"doc": { "field_test" : "update"}}
{"delete": {"_index": "mydoc", "_id": "11"}}
위와 같이 파일을 bulk_test.json 파일로 작성한 뒤
윈도우 명령 프롬프트(CMD)에서 curl을 이용하여 REST API를 실행 할 수 있습니다.
파일의 경로로 이동하여 다음 명령어를 사용합니다.
curl -H "Content-Type: application/x-ndjson" -u elastic:changeme -XPOST localhost:9201/_bulk --data-binary @./bulk_test.json
-H는 curl의 헤더옵션으로 NDJSON 타입의 콘텐츠를 사용한다는 의미입니다.
-u는 엘라스틱에서 설정한 ID와 비밀번호입니다. (위에서는 초기값)
-X는 요청 매소드를 기술합니다.
localhost:9201은 엘라스틱서치가 동작하는 호스트 주소이고 /_bulk는 bulk API를 호출합니다.
--data-binary는 POST 매소드에 우리가 만든 파일을 바이너리 형태로 전송해주는 파라미터입니다.
주의할 점은 _bulk 의 명령문과 데이터문은 반드시 한 줄 안에 입력이 되어야 하며 줄바꿈을 허용하지 않는다 입니다.
{
"index":{
"_index": "test",
"_id": "1"
}
}
위와 같이 JSON 포맷과 같이 포맷팅 할 경우 동작하지않습니다.
'개발 > ELK' 카테고리의 다른 글
Elasticsearch 기본 (0) | 2023.05.17 |
---|---|
[Logstash] 로그스태시 파이프라인, 필터 (1) | 2023.04.11 |
[Elasticsearch] 집계 쿼리 (0) | 2023.04.10 |
[Elasticsearch] 검색 쿼리 (1) | 2023.04.07 |
[Elasticsearch] CRUD - 데이터 입력, 조회, 삭제, 수정 (0) | 2023.03.27 |
댓글