2.X/6. Modeling Your Data

6-4-12. Faking Index per User with Aliases

drscg 2017. 9. 23. 12:57

To keep our design simple and clean, we would like our application to believe that we have a dedicated index per user—or per forum in our example—even if the reality is that we are using one big shared index. To do that, we need some way to hide the routing value and the filter onforum_id.

간단하게 말하면, 실제로는 하나의 큰 shared index를 사용하고 있지만, 응용프로그램이 사용자 별로(예제에서는 포럼 별로) 전용 index가 있다고 믿게 하고 싶다. 이를 위해, routing 값과 forum_id 라는 filter를 숨길 수 있는 방법이 필요하다.

Index aliases allow us to do just that. When you associate an alias with an index, you can also specify a filter and routing values:

index alias로 이것이 가능하다. alias를 index에 연결할 때, filter와 routing 값도 지정할 수 있다.

PUT /forums/_alias/baking
{
  "routing": "baking",
  "filter": {
    "term": {
      "forum_id": "baking"
    }
  }
}

Now, we can treat the baking alias as if it were its own index. Documents indexed into the bakingalias automatically get the custom routing value applied:

이제, baking alias를 자신의 index인 것처럼 취급할 수 있다. baking alias에 색인된 document는 자동으로 사용자 정의 routing 값이 적용된다.

PUT /baking/post/1 
{
  "forum_id": "baking", 
  "title":    "Easy recipe for ginger nuts",
  ...
}

 

filter가 동작하기 위해, 여전히 forum_id field가 필요하다. 하지만, 사용자 정의 routing 값은 alias에 포함되어 있다.

Queries run against the baking alias are run just on the shard associated with the custom routing value, and the results are automatically filtered by the filter we specified:

baking alias에 대해 동작하는 query는 사용자 정의 routing 값과 관련된 shard에서만 동작된다. 그리고, 결과는 자동으로 지정한 filter에 의해 filtering 된다.

GET /baking/post/_search
{
  "query": {
    "match": {
      "title": "ginger nuts"
    }
  }
}

Multiple aliases can be specified when searching across multiple forums:

다수의 포럼에 대해 검색하는 경우에는 다수의 alias를 지정할 수 있다.

GET /baking,recipes/post/_search 
{
  "query": {
    "match": {
      "title": "ginger nuts"
    }
  }
}

두 개의 routing 값이 모두 적용된다. 그리고 결과는 각각의 filter에 일치할 수 있다.


'2.X > 6. Modeling Your Data' 카테고리의 다른 글

6-4-09. Retiring Data  (0) 2017.09.23
6-4-10. User-Based Data  (0) 2017.09.23
6-4-11. Shared Index  (0) 2017.09.23
6-4-13. One Big User  (0) 2017.09.23
6-4-14. Scale Is Not Infinite  (0) 2017.09.23