'_routing'에 해당되는 글 1건

  1. 2015.08.27 [Elasticsearch] _id 와 _routing 이해하기.

[Elasticsearch] _id 와 _routing 이해하기.

Elastic/Elasticsearch 2015. 8. 27. 11:55

Elasticsearch에서 routing 기능은 다양하게 활용이 가능 합니다.

이게 무엇인지는 아래 elastic official document 를 먼저 읽어 보시면 좋을 것 같습니다.


[Reference. _routing]

https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-routing-field.html


위 문서의 요약 내용은 아래와 같습니다.

- store set to true

- index set to not_analyzed


여기서 not_analyzed로 설정 하는 이유는 shard routing 을 위한 shard id 를 구하기 위해서 입니다.

즉, 단일 구성의 key로 만들어야 routing 정보가 정해지기 때문입니다.


[Reference. _id]

https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-id-field.html

※ _routing 과 동일한 mapping 속성을 갖습니다.


_id와 _routing 의 이해


기본적으로 문서를 색인하기 위해서는 문서의 unique id 가 필요 합니다.

elasticsearch 에서는 _id 라는 필드를 이용해서 문서의 uniqueness 를 보장해 주고 있는데요.

이 값은 hash 알고리즘을 이용해서 색인할 shard id 를 생성 합니다. 

또한, _id 값은 Get API 를 이용해서  문서를 직접 access 할 수 있게 해줍니다.


[Get API]

$ curl -XGET http://localhost:9200/INDEX/TYPE/_id


_routing은 쉽게는 문서에 대한 그룹이나 분류에 활용을 할 수 있는 기능이라고 이해 하시면 좋습니다.

즉, 문서를 색인 할 때 같은 분류에 속하는 문서들을 특정 shard로 색인을 하고 검색 시에도 모든 shard를 대상으로 하지 않기 때문에 성능적인 부분이나 활용에서도 유용합니다.


_routing도 _id 와 동일하게 해당 값을 이용해서 shard id 를 구한다는 점에서 동일하며 mapping 설정도 동일 합니다.

차이점이 있다면 _id 는 문서 자체에 대한 routing 이고, _routing 은 문서 집단 또는 그룹에 대한 routing 이라는 것입니다.

또한 검색 입장에서는 _id 는 문서 하나를 검색해서 가져오지만, _routing 은 지정된 key 값에 의한 shard 들을 대상으로 검색을 하게 됩니다.


아래는 REST API 형태의 예제 입니다.


※ _id 가 1 인 문서 검색

$ curl -XGET http://localhost:9200/INDEX/TYPE/1


※ _routing 을 하나 만 지정한 문서 검색 (routing 값은 sports)

$ curl -XGET http://localhost:9200/_search?routing=sports

sports 에 해당하는 shard id 가 0 이라면 0 번 shard 로만 검색 질의가 실행 됩니다.


※ _routing 을 두 개 지정한 문서 검색 (routing 값은 sports, entertainment)

$ curl -XGET http://localhost:9200/_search?routing=sports,entertainment

sports 에 해당하는 shard id 가 0이고 entertainment 에 해당하는 shard id 가 1 이라면 0과 1번 shard 로만 검색 질의가 실행 됩니다.


: