검색 샤드 라우팅 (Search Shard Routing)
검색 샤드 라우팅 (Search Shard Routing)
문서가 어느 샤드에 저장될지, 검색이 어떤 샤드에서 실행될지를 정하는 게 라우팅이에요. 기본적으로 해시로 균등 분산되지만, routing 값을 직접 지정하면 같은 값의 문서를 한 샤드에 모을 수 있어요. 그룹별 데이터를 모아두고 원하는 샤드만 검색하고 싶을 때 특히 유용해요.
routing 값으로 문서 넣기
인덱싱 요청에 routing 쿼리 파라미터를 주면 그 값 기준으로 샤드를 고르게 돼요. 같은 routing 값이면 항상 같은 샤드에 저장돼요.
PUT /my-index-000001/_doc/1?routing=my-routing-value
{
"text": "foo"
}
이 방식은 "한 사용자(user)의 모든 문서를 한 샤드에 모은다" 같은 설계에 딱 맞아요. 검색할 때도 같은 routing을 넘기면 해당 샤드만 뒤지므로 효율적이에요.
routing 값으로 검색하기
_search 요청에 routing을 지정하면 해당 샤드에서만 검색을 수행해요.
GET /my-index-000001/_search?routing=user1
{
"query": {
"match": {
"text": "foo"
}
}
}
여러 값을 콤마로 나열할 수도 있어요. 주의할 점은, 문서를 넣을 때 쓴 routing 값과 검색할 때의 값이 달라지면 그 문서를 못 찾을 수 있다는 거예요.
replicas처럼 노드 선택 제어하기
검색이 실행될 노드·샤드 종류도 preference 파라미터로 조절할 수 있어요. 예를 들어 복제본에서만 읽고 싶다면 _replica를 지정하고, 특정 샤드로 좁힐 수도 있어요.
GET /my-index-000001/_search?preference=_shards:2|_replica
{
"query": {
"match_all": {}
}
}
적응형 복제본 선택(ARS)
기본적으로 Elasticsearch는 노드 응답 시간과 큐 길이를 보고 가장 빠른 복제본을 고르는 적응형 복제본 선택(Adaptive Replica Selection) 을 써요. 특별히 preference를 주지 않아도 자동으로 가장 유리한 샤드를 골라서 검색 성능을 높여줘요.