일래스틱서치에 라우팅 정보를 제공하는 방법은 몇 가지가 있다. 가장 간단한 방법은 다큐먼트를 저장할 때 routing URI 매개 변수를 추가하는 것이다. 예를 들면 다음과 같다.


$ curl -XPUT localhost:9200/person/doc/1?routing=A -d '{ "name" : "samuel" }'



$ curl -XPOST localhost:9200/_bulk --data-binary '

    

{ "index" : { "_index" : "person", "_type" : "doc", "_routing" : "A" } }

{ "name" : "samuel" }'



확인하는 방법은 _cat/shards 이다.

$  curl -XGET localhost:9200/_cat/shards/person?v
index  shard prirep state      docs store ip        node
person 2     p      STARTED       0  130b 127.0.0.1 5OEGj_a
person 1     p      STARTED       2 6.6kb 127.0.0.1 5OEGj_a
person 3     p      STARTED       1 3.4kb 127.0.0.1 5OEGj_a
person 4     p      STARTED       0  130b 127.0.0.1 5OEGj_a
person 0     p      STARTED       0  130b 127.0.0.1 5OEGj_a




또한 특정 routing 매개 변수 값으로 모든 다큐먼트를 얻어로면 다음 쿼리를 실행한다.


$ curl -XGET 'localhost:9200/person/_search?pretty&q=*&routing=A'





검색 샤드 API에 routing 매개 변수를 사용하면 하나의 샤드에만 요청을 보낸다.


curl -XGET 'localhost:9200/documents/_search_shards?pretty&routing=B' -d '{"query":"match_all":{}}'

{

  "nodes" : {

    "5OEGj_avT8un0nOak28qQg" : {

      "name" : "5OEGj_a",

      "ephemeral_id" : "cLOEvTLySTGA9z49Q2NHLg",

      "transport_address" : "127.0.0.1:9300",

      "attributes" : { }

    }

  },

  "indices" : {

    "documents" : { }

  },

  "shards" : [

    [

      {

        "state" : "STARTED",

        "primary" : true,

        "node" : "5OEGj_avT8un0nOak28qQg",

        "relocating_node" : null,

        "shard" : 0,

        "index" : "documents",

        "allocation_id" : {

          "id" : "jBQxmDVISEWGPnkC0NL-Eg"

        }

      }

    ]

  ]

}




라우팅을 사용해서 다큐먼트를 저장할 때 동일한 라우팅 값을 가진 다큐먼트는 동일한 샤드에서 저장된다. 


그러나 주어진 샤드에 여러 라우팅 값을 가진 많은 다큐먼트가 있을 수 있다.


라우팅을 사용하면 쿼리 중에 사용되는 샤드 개수를 제한할 수 있지만 필터링을 대체할 수는 없다.


즉 라우팅을 포함한 쿼리와 라우팅을 포함하지 않은 쿼리는 동일한 필터 집합을 가져야 한다. 


예를 들어 사용자 식별자를 라우팅 값으로 사용하고 사용자 데이터를 검색한다면 해당 식별자에도 필터를 포함해야 한다.








앨리어스를 사용할 수도 있다. index와 routing 매개 변수를 함께 정의했다. routing 매개 변수에 여러 값을 넣을 수 있다. (앨리어스는 검색 개발자에 실제 관련 정보를 숨기거나 multi tenany 같은 효력을 주게 할 수 있다)


curl -XPOST 'http://localhost:9200/_aliases' -d '{

"actions" : [

{

"add" : {

"index" : "person",

"alias" : "personA",

"routing" : "A"

}

}

]

}'




앨리어스 사용방법은 다음과 같다.


curl -XGET 'http://localhost:9200/personA/_search?q=*&pretty=true'




여러 라우팅 매개 변수를 사용해 하나 이상의 샤드에 요청할 수 있다.


curl -XGET 'localhost:9200/persons/_search?routing=A,B&pretty=true'



참고로 앨리어스에 인덱싱(인덱스 저장)에 사용되는 index_routing 매개 변수를 사용할 수 있는데, 오직 search_routing과 달리 하나의 값만 사용할 수 있다.

Posted by '김용환'
,