_routing 메타데이터 필드
_routing 메타데이터 필드
OpenSearch는 해싱 알고리즘을 사용해 문서를 인덱스의 특정 샤드로 라우팅해요. 기본적으로 문서의 _id 필드가 라우팅 값으로 사용되지만, 각 문서에 대해 커스텀 라우팅 값을 지정할 수도 있어요.
출처: 문서
본문
기본 라우팅
다음은 OpenSearch의 기본 라우팅 공식이에요. _routing 값은 문서의 _id예요.
shard_num = hash(_routing) % num_primary_shards
커스텀 라우팅
다음 예제 요청처럼 문서를 인덱스할 때 커스텀 라우팅 값을 지정할 수 있어요:
PUT sample-index1/_doc/1?routing=JohnDoe1
{
"title": "This is a document"
}
이 예제에서 문서는 기본 _id 대신 JohnDoe1 값을 사용해 라우팅돼요. 문서를 검색, 삭제, 업데이트할 때도 다음 예제 요청처럼 같은 라우팅 값을 제공해야 해요:
GET sample-index1/_doc/1?routing=JohnDoe1
라우팅으로 쿼리하기
_routing 필드를 사용해 라우팅 값에 기반해 문서를 쿼리할 수 있어요. 다음 예제를 참고하세요. 이 쿼리는 JohnDoe1 라우팅 값과 연관된 샤드만 검색해요:
GET sample-index1/_search
{
"query": {
"terms": {
"_routing": [ "JohnDoe1" ]
}
}
}
필수 라우팅
다음 예제 요청처럼 인덱스의 모든 CRUD 작업에 커스텀 라우팅을 필수로 만들 수 있어요. 라우팅 값을 제공하지 않고 문서를 인덱스하려고 하면 OpenSearch가 예외를 발생시켜요:
PUT sample-index2
{
"mappings": {
"_routing": {
"required": true
}
}
}
특정 샤드로 라우팅하기
인덱스가 커스텀 값을 단일 샤드가 아니라 샤드의 일부 하위 집합으로 라우팅하도록 구성할 수 있어요. 이는 인덱스 생성 시점에 index.routing_partition_size를 설정해 수행해요. 샤드 계산 공식은 shard_num = (hash(_routing) + hash(_id)) % routing_partition_size) % num_primary_shards예요.
다음 예제 요청은 문서를 인덱스의 네 개 샤드 중 하나로 라우팅해요:
PUT sample-index3
{
"settings": {
"index.routing_partition_size": 4
},
"mappings": {
"_routing": {
"required": true
}
}
}