문서 재인덱싱 API
문서 재인덱싱 API (Reindex Documents API)
1.0에서 도입되었어요. reindex document API 작업은 원본 인덱스(들), 데이터 스트림, 또는 별칭에서 대상 인덱스, 데이터 스트림, 또는 별칭으로 모든 문서 또는 문서 부분 집합을 복사해요. 원본과 대상은 달라야 해요.
reindex 작업은 원본 인덱스의 스냅샷을 찍고 문서를 대상 인덱스로 복사해요. 각 문서에 대해 문서 소스(_source 필드)를 추출해서 대상에 인덱싱하는 방식으로 복사가 수행돼요.
OpenSearch는 크로스 클러스터 재인덱싱(cross-cluster reindexing)을 네이티브로 지원해서, 서로 다른 OpenSearch 클러스터 간에 데이터를 복사할 수 있어요. 자세한 내용은 Cross-cluster reindexing을 참고하세요.
Reindex API를 사용하기 전에 다음 요구 사항과 제한 사항을 유의하세요.
- reindex 작업은 원본 인덱스의 모든 문서에 대해
_source필드가 활성화되어 있어야 해요._source가 비활성화되어 있으면 작업이 실패해요. - reindex 작업을 실행하기 전에 대상 인덱스를 만들고 구성해야 해요. OpenSearch는 원본 인덱스에서 설정, 매핑, 샤드 구성을 자동으로 복사하지 않아요.
- 요구 사항에 따라 대상 인덱스에 적절한 수의 샤드, 복제본, 필드 매핑을 구성하세요.
- 대규모 reindex 작업의 경우
number_of_replicas를0으로 설정해 대상 인덱스의 복제본을 일시적으로 비활성화하고, 완료 후 다시 활성화하는 것을 고려하세요.
대규모 데이터셋을 재인덱싱하면 리소스를 많이 사용하고 클러스터 성능에 영향을 줄 수 있어요. reindex 작업 중에는 클러스터 상태를 모니터링하고, 프로덕션 환경에서는 스로틀링 파라미터 사용을 고려하세요. 자세한 내용은 Performance optimization을 참고하세요.
실용적인 튜토리얼 스타일의 재인덱싱 가이드와 일반적인 사용 사례·예제는 Reindex data를 참고하세요.
같은 인덱스 안의 문서를 수정하는 업데이트 작업과 달리, reindex 작업은 서로 다른 원본과 대상을 대상으로 해요. 따라서 버전 충돌이 발생할 가능성이 낮아요. version_type 파라미터는 재인덱싱 중에 OpenSearch가 문서 버전을 처리하는 방식을 제어해요. 기본적으로 버전 충돌은 reindex 과정을 멈춰요. 충돌이 발생해도 재인덱싱을 계속하려면 conflicts 파라미터를 proceed로 설정하세요. 응답에는 만난 버전 충돌 횟수가 포함돼요. 다른 오류 유형은 conflicts 파라미터의 영향을 받지 않아요.
기본적으로 같은 ID를 가진 문서는 덮어써져요. op_type 파라미터는 기존 문서를 교체할 수 있는지, 아니면 새 문서만 허용되는지 결정해요. 새 문서만 허용하면 기존 ID로 문서를 인덱싱하려 할 때 오류가 발생해요. 자세한 내용은 요청 본문 필드를 참고하세요.
출처: 문서
본문
엔드포인트 (Endpoints)
POST /_reindex
쿼리 파라미터 (Query parameters)
다음 표는 사용 가능한 쿼리 파라미터를 보여줘요. 모든 파라미터는 선택 사항이에요.
| 파라미터 | 데이터 타입 | 설명 |
|---|---|---|
| refresh | Boolean | true이면 OpenSearch가 샤드를 새로고침해서 reindex 작업을 검색 결과에서 사용할 수 있게 해요. 유효한 값은 true, false, 그리고 작업 실행 전에 새로고침을 기다리도록 지정하는 wait_for예요. 기본값은 false예요. |
| timeout | Time unit | 클러스터의 응답을 기다리는 시간이에요. 기본값은 30s예요. |
| wait_for_active_shards | String | OpenSearch가 reindex 요청을 처리하기 전에 사용 가능해야 하는 활성 샤드 수예요. 기본값은 1(프라이머리 샤드만)이에요. all 또는 양의 정수로 설정해요. 1보다 큰 값은 복제본이 필요해요. 예를 들어 값 3을 지정하면 작업이 성공하려면 인덱스에 두 개의 복제본이 두 개의 추가 노드에 분산되어 있어야 해요. |
| wait_for_completion | Boolean | false이면 OpenSearch가 완료를 기다리지 않고 reindex 작업을 비동기로 실행해요. 요청은 즉시 반환되고 작업은 백그라운드에서 계속돼요. Tasks API로 진행 상황을 모니터링할 수 있어요. 기본값은 true인데, 이는 작업이 동기로 실행된다는 뜻이에요. 비동기 작업을 참고하세요. |
| requests_per_second | Integer | 요청의 스로틀링을 초당 하위 요청 수로 지정해요. 기본값은 -1인데, 이는 스로틀링이 없다는 뜻이에요. 재인덱싱 속도 제어 및 Throttling and rate control을 참고하세요. |
| require_alias | Boolean | 대상 인덱스가 별칭이어야 하는지 여부예요. 기본값은 false예요. |
| scroll | Time unit | 검색 컨텍스트를 열어 두는 시간이에요. 기본값은 5m이에요. |
| slices | Integer | 자동 슬라이싱을 위한 슬라이스 수예요. OpenSearch는 reindex 작업을 이 수의 병렬 하위 작업으로 자동 나눠요. 기본값은 1(슬라이싱 없음)이에요. OpenSearch가 최적의 슬라이스 수를 자동으로 결정하게 하려면 이 파라미터를 auto로 설정하세요. 병렬 처리를 위한 슬라이싱 사용을 참고하세요. |
| max_docs | Integer | reindex 작업이 처리해야 할 최대 문서 수예요. 기본값은 모든 문서예요. 샘플 데이터 추출을 참고하세요. |
요청 본문 필드 (Request body fields)
다음 표는 모든 요청 본문 필드를 보여줘요.
| 필드 | 데이터 타입 | 필수/선택 | 설명 |
|---|---|---|---|
| source | Object | 필수 | 데이터를 복사해 올 원본이에요. source 객체를 참고하세요. |
| dest | Object | 필수 | 데이터를 복사해 넣을 대상이에요. dest 객체를 참고하세요. |
| conflicts | String | 선택 | reindex 작업이 버전 충돌에 부딪히면 어떻게 해야 하는지 OpenSearch에 알려줘요. 유효한 값은 abort와 proceed예요. 기본값은 abort예요. |
| script | Object | 선택 | reindex 작업 중 데이터에 변환을 적용하기 위해 OpenSearch가 사용하는 스크립트예요. script 객체를 참고하세요. |
source 객체 (The source object)
source 객체는 다음 필드를 지원해요.
| 필드 | 데이터 타입 | 필수/선택 | 설명 |
|---|---|---|---|
| index | String | 필수 | 복사해 올 인덱스, 데이터 스트림, 또는 별칭의 이름이에요. 여러 원본 인덱스를 쉼표로 구분한 목록으로 지정할 수 있어요. |
| query | Object | 선택 | reindex 작업에 사용할 검색 쿼리예요. 쿼리로 문서 필터링을 참고하세요. |
| remote | Object | 선택 | 데이터를 복사해 올 원격 OpenSearch 클러스터에 대한 정보예요. Cross-cluster reindexing을 참고하세요. |
| remote.host | String | remote가 지정될 때 필수 | 인덱싱해 올 원격 OpenSearch 클러스터의 URL이에요. |
| remote.username | String | 선택 | 원격 호스트 인증에 사용할 사용자 이름이에요. |
| remote.password | String | 선택 | 원격 호스트 인증에 사용할 비밀번호예요. |
| remote.socket_timeout | String | 선택 | 원격 소켓 읽기 제한 시간이에요. 기본값은 30s예요. |
| remote.connect_timeout | String | 선택 | 원격 연결 제한 시간이에요. 기본값은 30s예요. |
| size | Integer | 선택 | 배치당 인덱싱할 문서 수예요. 원격 원본에서 인덱싱할 때 사용해서 각 배치가 기본 최대 크기 100MB인 온-힙(on-heap) 버퍼에 들어맞는지 확인해요. |
| slice | Object | 선택 | 수동 슬라이싱 구성이에요. 처리할 데이터의 슬라이스를 수동으로 지정하려면 id(슬라이스 ID)와 max(전체 슬라이스 수) 속성을 가진 객체여야 해요. 이렇게 하면 각각 다른 슬라이스를 처리하는 여러 reindex 작업을 실행해서 병렬 처리를 활성화해요. 병렬 처리를 위한 슬라이싱 사용을 참고하세요. |
| _source | Boolean 또는 Array | 선택 | 원본 필드를 재인덱싱할지 여부예요. 재인덱싱할 필드 목록 또는 모든 필드를 재인덱싱할 true를 지정해요. 기본값은 true예요. 특정 필드 선택을 참고하세요. |
| sort | Array | 선택 | 더 이상 사용되지 않아요(deprecated). 재인덱싱 전에 문서를 정렬하는 데 사용하는 <field>:<direction> 쌍의 쉼표 구분 목록이에요. max_docs와 함께 사용해 재인덱싱할 문서를 제어한다면, 쿼리로 문서를 필터링해 원하는 데이터 부분 집합을 찾는 것을 고려하세요. |
dest 객체 (The dest object)
dest 객체는 다음 필드를 지원해요.
| 필드 | 데이터 타입 | 필수/선택 | 설명 |
|---|---|---|---|
| index | String | 필수 | 복사해 넣을 인덱스, 데이터 스트림, 또는 별칭의 이름이에요. |
| version_type | String | 선택 | 재인덱싱 중 OpenSearch가 문서 버전을 처리하는 방식을 제어해요. - internal(기본값): 버전을 무시하고 원본의 문서와 같은 ID를 가진 대상의 문서를 덮어써요. - external : 원본의 버전을 유지하고, 없는 문서를 만들며, 원본보다 오래된 버전을 가진 대상 문서만 업데이트해요. - external_gt : external과 비슷하지만 원본 버전이 대상 버전보다 클 때만 문서를 업데이트해요. - external_gte : external과 비슷하지만 원본 버전이 대상 버전보다 크거나 같을 때 문서를 업데이트해요. |
| op_type | String | 선택 | 재인덱싱 중 문서가 처리되는 방식을 결정해요. - index(기본값): 새 문서를 만들고 기존 문서를 업데이트해요. - create : 대상에 존재하지 않는 문서만 만들어요. 기존 ID를 가진 문서는 버전 충돌을 일으켜요. 데이터 스트림(append-only)으로 재인덱싱할 때 필수예요. |
| pipeline | String | 선택 | 재인덱싱 중 사용할 ingest pipeline이에요. ingest pipeline으로 문서 변환을 참고하세요. |
| routing | String | 선택 | 재인덱싱 중 문서 라우팅이 처리되는 방식을 제어해요. 유효한 값은 keep(기존 라우팅 유지, 기본값), discard(라우팅 제거), 또는 =<value>(라우팅을 특정 값으로 설정)예요. Routing을 참고하세요. |
script 객체 (The script object)
script 객체는 다음 필드를 지원해요.
| 필드 | 데이터 타입 | 필수/선택 | 설명 |
|---|---|---|---|
| source | String | 필수 | 문자열 형태의 스크립트 소스 코드예요. |
| lang | String | 선택 | 스크립팅 언어예요. 유효한 값은 painless, expression, mustache, java예요. 기본값은 painless예요. 자세한 내용은 Painless scripting language를 참고하세요. |
재인덱싱이 동작하는 방식 (How reindexing works)
reindex 작업은 원본 인덱스의 스냅샷을 찍고 문서를 대상 인덱스로 복사해요. 이 방식은 같은 인덱스에서 동작하는 업데이트 작업과 달리 버전 충돌이 발생할 가능성이 낮다는 뜻이에요.
기본적으로 버전 충돌은 reindex 과정을 멈춰요. 충돌이 발생해도 재인덱싱을 계속하려면 conflicts 파라미터를 proceed로 설정하세요. 응답에는 만난 버전 충돌 횟수가 포함돼요. 다른 오류 유형은 conflicts 파라미터의 영향을 받지 않아요.
예제 요청 (Example request)
예제 응답 (Example response)
{
"took": 28829,
"timed_out": false,
"total": 111396,
"updated": 0,
"created": 111396,
"deleted": 0,
"batches": 112,
"version_conflicts": 0,
"noops": 0,
"retries": {
"bulk": 0,
"search": 0
},
"throttled_millis": 0,
"requests_per_second": -1.0,
"throttled_until_millis": 0,
"failures": []
}
응답 본문 필드 (Response body fields)
다음 표는 모든 응답 본문 필드를 보여주고 각각에 대한 자세한 설명을 제공해요.
| 필드 | 데이터 타입 | 설명 |
|---|---|---|
| took | Integer | 모든 배치 처리와 네트워크 오버헤드를 포함해 전체 reindex 작업을 완료하는 데 걸린 총 시간(밀리초)이에요. |
| timed_out | Boolean | reindex 작업의 어떤 부분이라도 구성된 제한 시간을 초과했는지 여부예요. true이면 작업이 부분적으로 완료되었을 수 있어요. |
| total | Integer | reindex 작업 중 성공적으로 처리된 전체 문서 수예요. 생성되거나, 업데이트되거나, no-op 작업이 된 문서를 포함해요. |
| updated | Integer | 같은 ID를 가진 문서가 이미 존재해서 대상 인덱스에서 업데이트된 문서 수예요. |
| created | Integer | 대상 인덱스에서 만들어진 새 문서 수예요. 대상에 이전에 존재하지 않던 문서예요. |
| deleted | Integer | 대상 인덱스에서 삭제된 문서 수예요. 스크립트가 ctx.op = "delete"를 설정할 때 발생해요. |
| batches | Integer | reindex 작업 중 처리된 스크롤 배치 수예요. 각 배치는 size 파라미터로 구성된 대로 여러 문서를 포함해요. |
| version_conflicts | Integer | 만난 버전 충돌 수예요. 버전 충돌은 대상 문서가 원본 문서보다 높은 버전을 가질 때(external versioning 사용 시) 발생해요. |
| noops | Integer | 처리 중 건너뛴 문서 수예요. 스크립트가 ctx.op = "noop"을 설정하거나 변경이 필요 없을 때 발생해요. |
| retries | Object | 서로 다른 작업 유형에 대한 재시도 횟수를 포함하는 재시도 통계 객체예요. 일시적인 실패가 발생하면 재시도가 자동으로 이뤄져요. |
| retries.bulk | Integer | reindex 작업 중 시도된 bulk 작업 재시도 횟수예요. |
| retries.search | Integer | reindex 작업 중 시도된 검색 작업 재시도 횟수예요. |
| throttled_millis | Integer | requests_per_second 설정을 따르기 위해 작업이 스로틀링된 총 시간(밀리초)이에요. 값이 클수록 스로틀링이 더 많이 적용되었음을 나타내요. |
| requests_per_second | Float | 작업 중 초당 실제 실행된 요청 수예요. 스로틀링 조정과 시스템 성능 때문에 요청한 속도와 다를 수 있어요. |
| throttled_until_millis | Integer | 비동기 작업의 경우, 스로틀링된 요청이 실행될 다음 시점(epoch 이후 밀리초)을 나타내요. 완료된 작업에서는 항상 0이에요. |
| failures | Array | 작업 중 만난 복구할 수 없는 오류를 설명하는 실패 객체 배열이에요. 각 실패는 오류 유형, 원인, 영향받은 문서에 대한 세부 정보를 포함해요. |
선택적 재인덱싱 (Selective reindexing)
다음 예제들은 재인덱싱 중 데이터를 선택적으로 복사하는 다양한 방법을 보여줘요. 문서 필터링, 특정 필드 선택, 샘플 데이터셋 추출을 포함해요.
쿼리로 문서 필터링 (Filtering documents by query)
특정 기준과 일치하는 문서만 복사해요.
특정 필드 선택 (Selecting specific fields)
원본 문서의 특정 필드만 복사해요.
샘플 데이터 추출 (Extracting sample data)
테스트를 위한 더 작은 데이터셋을 만들어요.
라우팅 (Routing)
기본적으로 reindex 작업이 라우팅이 있는 문서를 만나면, 스크립트가 바꾸지 않는 한 라우팅은 유지돼요. dest 섹션의 routing 파라미터로 라우팅 동작을 제어할 수 있어요.
keep: 원본 문서의 라우팅을 유지해요(기본값).discard: 재인덱싱된 문서에서 라우팅을 제거해요.=<text>: 모든 재인덱싱된 문서의 라우팅을 지정된 값으로 설정해요.
다음 요청은 모든 재인덱싱된 문서에 사용자 지정 라우팅 값을 설정해요.
ingest pipeline으로 문서 변환 (Transforming documents using ingest pipelines)
데이터를 변환하려면 재인덱싱 중 문서를 ingest pipeline을 통해 처리하세요. 먼저 파이프라인을 만들고, reindex 작업에서 이를 참조해요.
reindex 작업을 실행하기 전에 ingest pipeline을 만들어요. 이 예제는 processed_at 타임스탬프를 추가하고 status 필드를 대문자로 변환하는 파이프라인을 만들어요.
PUT /_ingest/pipeline/data-enrichment
{
"description": "Enriches documents during reindexing",
"processors": [
{
"set": {
"field": "processed_at",
"value": ""
}
},
{
"uppercase": {
"field": "status"
}
}
]
}
재인덱싱 속도 제어 (Controlling the reindex rate)
클러스터 영향을 최소화하도록 reindex 속도를 제어해요.
스크립트 작업 (Script operations)
스크립트를 사용해 reindex 과정 중 문서를 변환할 수 있어요. 문서 콘텐츠와 메타데이터를 수정하고 처리할 문서를 제어할 수 있어요.
스크립트는 다음 문서 메타데이터 필드를 수정할 수 있어요.
ctx._id: 문서 ID를 변경해요.ctx._index: 문서를 다른 대상 인덱스로 라우팅해요.ctx._version: 문서 버전 관리를 제어해요.ctx._routing: 사용자 지정 라우팅 값을 설정해요.
ctx.op 필드를 설정해 각 문서에 일어나는 일을 제어해요.
ctx.op = "index": 문서를 정상적으로 인덱싱해요(기본 동작).ctx.op = "create": 문서가 존재하지 않을 때만 만들어요.ctx.op = "noop": 문서를 건너뛰어요(조건부 처리에 유용).ctx.op = "delete": 대상 인덱스에서 문서를 삭제해요.
필드 값 변환 (Transforming field values)
재인덱싱 중 문서에 필드를 추가하거나 수정할 수 있어요. 예를 들어 이 스크립트는 각 문서에 타임스탬프와 마이그레이션 상태를 추가해요.
필드 이름 바꾸기 (Renaming fields)
스크립트를 사용해 재인덱싱 중 필드 이름을 바꿀 수 있어요. 이 스크립트는 reindex 작업 중 client_name을 customer_name으로, total_amount를 order_total로 바꿔요.
문서 조건부 처리 (Processing documents conditionally)
조건에 따라 문서를 건너뛰거나 다른 변환을 적용할 수 있어요. 예를 들어 이 스크립트는 보관된(archived) 문서를 건너뛰고 나머지 모든 문서에 마이그레이션 타임스탬프를 추가해요.
문서를 다른 인덱스로 라우팅 (Routing documents to different indexes)
문서 콘텐츠에 따라 문서를 다른 대상 인덱스로 동적으로 라우팅할 수 있어요. 예를 들어 이 스크립트는 제품을 카테고리별 인덱스로 라우팅해요.
시간 기반 인덱스 통합 (Consolidating time-based indexes)
다음 스크립트를 사용해 여러 시간 기반 인덱스를 단일 인덱스로 통합해요.
이 예제는 3개월치 일별 로그 인덱스를 분기별 인덱스로 통합하면서 통합에 대한 메타데이터를 추가해요.
비동기 작업 (Asynchronous operations)
대규모 데이터셋의 경우 reindex 작업을 비동기로 실행해 애플리케이션이 차단되는 것을 피할 수 있어요. wait_for_completion=false로 설정하면 OpenSearch가 작업 진행 상황을 모니터링하는 데 사용할 수 있는 작업 ID를 즉시 반환해요.
응답에는 작업 ID가 포함돼요.
{
"task": "oTUltX4IQMOUUVeiohTt8A:12345"
}
Tasks API로 reindex 작업의 상태를 확인해요.
GET /_tasks/oTUltX4IQMOUUVeiohTt8A:12345
다음 작업으로 오래 실행되는 reindex 작업을 관리할 수 있어요.
- 실행 중인 reindex 취소:
POST /_tasks/oTUltX4IQMOUUVeiohTt8A:12345/_cancel - 모든 reindex 작업 나열:
GET /_tasks?actions=*reindex* - 작업 정리: OpenSearch는 완료된 작업 문서를 자동으로 제거하지만, 즉시 정리가 필요하면 수동으로 삭제할 수 있어요.
크로스 클러스터 재인덱싱 (Cross-cluster reindexing)
원격 OpenSearch 클러스터에서 데이터를 복사해요.
원격 재인덱싱을 위한 SSL 구성 (SSL configuration for remote reindexing)
원격 클러스터에서 HTTPS로 재인덱싱할 때 opensearch.yml에서 SSL 설정을 구성하세요.
인증서 기반 인증 (Certificate-based authentication)
개별 인증서 파일로 SSL을 구성해요.
reindex.ssl.certificate_authorities: ["/path/to/ca-cert.pem"]
reindex.ssl.certificate: "/path/to/client-cert.pem"
reindex.ssl.key: "/path/to/client-key.pem"
reindex.ssl.verification_mode: full
키스토어 기반 인증 (Keystore-based authentication)
keystore와 truststore 파일로 SSL을 구성해요.
reindex.ssl.keystore.path: "/path/to/keystore.p12"
reindex.ssl.keystore.type: "PKCS12"
reindex.ssl.truststore.path: "/path/to/truststore.p12"
reindex.ssl.truststore.type: "PKCS12"
SSL 구성 옵션 (SSL configuration options)
다음 표는 사용 가능한 SSL 구성 파라미터를 보여줘요.
| 파라미터 | 설명 | 기본값 |
|---|---|---|
| reindex.ssl.verification_mode | 인증서 검증 수준: full, certificate, 또는 none |
full |
| reindex.ssl.certificate_authorities | CA 인증서 파일 경로 목록 | 없음 |
| reindex.ssl.truststore.path | truststore 파일(JKS 또는 PKCS12)의 경로 | 없음 |
| reindex.ssl.keystore.path | 클라이언트 인증용 keystore 파일의 경로 | 없음 |
| reindex.ssl.supported_protocols | 지원되는 TLS 프로토콜 버전 | TLSv1.3,TLSv1.2 |
SSL 설정은 opensearch.yml에 구성해야 하며 클러스터 재시작이 필요해요. reindex 요청 본문에서는 설정할 수 없어요.
원격 클러스터 허용 목록 (Remote cluster allow list)
opensearch.yml에서 허용된 원격 호스트를 구성해요.
reindex.remote.allowlist: [
"remote-cluster.example.com:9200",
"backup-cluster.example.com:9200",
"10.0.1.*:9200"
]
허용 목록은 다음을 지원해요.
- 명시적인 host:port 조합.
- IP 범위에 대한 와일드카드 패턴.
- 여러 클러스터 엔드포인트.
재시도 설정 (Retry settings)
원격 클러스터에 대한 요청이 실패하면 OpenSearch가 지수 백오프로 재시도해요. 다음 클러스터 설정이 재시도를 제어해요.
| 설정 | 설명 | 기본값 |
|---|---|---|
| reindex.remote.retry.initial_backoff | 첫 번째 재시도 전 대기 시간이에요. 이후 재시도마다 대기 시간이 두 배가 돼요. | 500ms |
| reindex.remote.retry.max_count | reindex 작업이 실패하기 전 최대 재시도 횟수예요. | 15 |
성능 최적화 (Performance optimization)
다음 기법으로 재인덱싱 성능을 최적화하세요.
스로틀링과 속도 제어 (Throttling and rate control)
스로틀링으로 reindex 작업이 클러스터 성능에 미치는 영향을 제어해요.
실행 중인 reindex 작업의 스로틀링을 동적으로 조정할 수 있어요.
POST /_reindex/task_id/_rethrottle?requests_per_second=200
병렬 처리를 위한 슬라이싱 사용 (Using slicing for parallel processing)
슬라이싱은 reindex 작업을 여러 병렬 작업으로 나눠 대규모 데이터셋의 성능을 개선해요.
자동 슬라이싱 (Automatic slicing)
OpenSearch가 최적의 슬라이스 수를 결정하게 하려면 slices 쿼리 파라미터를 auto로 설정해요.
수동 슬라이싱 (Manual slicing)
병렬화를 더 잘 제어하려면 요청 본문에서 슬라이스 ID와 전체 슬라이스 수를 지정해 수동으로 슬라이스를 구성할 수 있어요.
OpenSearch는 max 파라미터로 모든 슬라이스 요청에 걸쳐 데이터셋을 일관되게 분할해요. OpenSearch는 max 값을 사용해 각 문서에 해시 함수를 적용해 문서가 어느 슬라이스에 속하는지 결정해요. 이렇게 하면 다음이 보장돼요.
- 문서가 모든 슬라이스에 고르게 분산돼요.
- 각 문서는 정확히 하나의 슬라이스로 이동해요(중복이나 누락 없음).
- 일관성을 위해 모든 병렬 요청이 같은
max값을 사용해야 해요.
예를 들어 max: 4로 네 개의 요청을 병렬로 실행할 수 있어요.
- Request 1:
{"id": 0, "max": 4}(슬라이스 0 처리) - Request 2:
{"id": 1, "max": 4}(슬라이스 1 처리) - Request 3:
{"id": 2, "max": 4}(슬라이스 2 처리) - Request 4:
{"id": 3, "max": 4}(슬라이스 3 처리)
다음 요청은 전체 4개 슬라이스 중 슬라이스 0을 처리해요.
병렬 처리를 위해 서로 다른 슬라이스 ID(0~3)로 여러 요청을 실행하세요.
reindex 작업 모니터링 (Monitoring reindex operations)
다음 방법으로 reindex 작업의 진행 상황과 성능을 모니터링하세요.
클러스터의 모든 활성 reindex 작업을 모니터링해요.
GET /_tasks?actions=*reindex*&detailed=true
작업 ID로 특정 reindex 작업의 진행 상황을 확인해요.
GET /_tasks/oTUltX4IQMOUUVeiohTt8A:12345
reindex 작업 중 클러스터 성능과 디스크 사용량을 모니터링해요.
GET /_cluster/health
GET /_nodes/stats/indices/store
필요한 권한 (Required permissions)
Security plugin을 사용한다면 indices:data/write/reindex 권한이 있는지 확인하세요.