_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
    }
  }
}

더 알아보기 (Learn more)