미식가의 개발 일기

[Elasticsearch] Bulk API: Elasticsearch 대량 색인 작업 본문

Elasticsearch

[Elasticsearch] Bulk API: Elasticsearch 대량 색인 작업

대체불가 핫걸 2025. 7. 13. 12:59

✅ Bulk API란?

Bulk API는 여러 개의 문서 작업(색인, 생성, 수정, 삭제)을 한 번의 HTTP 요청으로 처리할 수 있는 기능이다.
이 방식을 사용하면 다음과 같은 이점이 있다:

  • 다수의 HTTP 호출 → 1회 요청으로 병합 → 네트워크 비용 절감
  • 대량 색인 시 속도 향상
  • 비동기 일괄 작업에 적합
공식 홈페이지 
 

Bulk index or delete documents | Elasticsearch API documentation

All methods and paths for this operation: POST /_bulk PUT /_bulk POST ...

www.elastic.co

 

🔧 요청 형식 (NDJSON)

Bulk API는 newline-delimited JSON 포맷을 사용한다.

POST /_bulk
Content-Type: application/x-ndjson

{ "index": { "_index": "my_index", "_id": "1" } }
{ "title": "문서 1", "content": "내용입니다" }
{ "create": { "_index": "my_index", "_id": "2" } }
{ "title": "문서 2", "content": "새 문서입니다" }
{ "update": { "_index": "my_index", "_id": "1" } }
{ "doc": { "title": "수정된 문서 1" } }
{ "delete": { "_index": "my_index", "_id": "2" } }

 

📌 작업 타입별 설명 및 예제

1️⃣ index – 문서 추가 또는 덮어쓰기

  • 존재하는 문서일 경우 덮어씀 (upsert)
{ "index": { "_index": "my_index", "_id": "1" } }
{ "title": "Elasticsearch 배우기", "content": "Bulk API 정리" }

 

2️⃣ create – 문서 없을 때만 생성

  • 문서가 존재하면 에러 발생
{ "create": { "_index": "my_index", "_id": "2" } }
{ "title": "새 문서", "category": "tech" }

 

3️⃣ update – 문서 일부 필드 수정

  • 기존 문서에서 특정 필드만 수정
{ "update": { "_index": "my_index", "_id": "1" } }
{ "doc": { "title": "업데이트된 제목" } }

 

4️⃣ delete – 문서 삭제

{ "delete": { "_index": "my_index", "_id": "2" } }

 

⚠️ 주의할 점

  • 요청 형식은 반드시 newline 단위의 JSON(NDJSON) 이어야 한다.
  • 너무 많은 문서를 한 번에 처리하면 성능 저하 또는 실패 발생 → 보통 1000개 단위로 나누어 처리 추천
  • 응답에서 errors: true가 나오면 개별 작업의 실패 여부를 꼭 확인해야 한다.

 

반응형