In the same way as we need to use the special nested
query to gain access to nested objects at search time, the dedicated nested
aggregation allows us to aggregate fields in nested objects:
검색 시에, nested object에 액세스하기 위해, 특별히 nested
query를 사용해야 하는 것과 동일한 방식으로, nested object에 있는 field를 aggregation하기 위한, 전용 nested
aggregation이 있다.
GET /my_index/blogpost/_search { "size" : 0, "aggs": { "comments": { "nested": { "path": "comments" }, "aggs": { "by_month": { "date_histogram": { "field": "comments.date", "interval": "month", "format": "yyyy-MM" }, "aggs": { "avg_stars": { "avg": { "field": "comments.stars" } } } } } } } }
| |
comments는 | |
stars의 평균은 각 bucket에 대해 계산된다. |
The results show that aggregation has happened at the nested document level:
결과는 aggregation이 nested document 수준에서 일어난다는 것을 보여준다.
... "aggregations": { "comments": { "doc_count": 4, "by_month": { "buckets": [ { "key_as_string": "2014-09", "key": 1409529600000, "doc_count": 1, "avg_stars": { "value": 4 } }, { "key_as_string": "2014-10", "key": 1412121600000, "doc_count": 3, "avg_stars": { "value": 2.6666666666666665 } } ] } } } ...
reverse_nested Aggregationedit
A nested
aggregation can access only the fields within the nested document. It can’t see fields in the root document or in a different nested document. However, we can step out of the nested scope back into the parent with a reverse_nested
aggregation.
nested
aggregation은 nested document내에 있는 field만 액세스할 수 있다. root document나 다른 nested document에 있는 field는 알 수 없다. 그러나, reverse_nested
aggregation을 통해, 부모 document로 중첩된 범위(nested scope)를 벗어날(step out) 수 있다.
For instance, we can find out which tags
our commenters are interested in, based on the age of the commenter. The comment.age
is a nested field, while the tags
are in the root document:
예를 들어, 댓글을 단 사용자의 나이를 기준으로, 댓글을 단 사용자가 관심 있어 하는 tags
를 찾을 수 있다.comments.age
는 nested field이지만, tags
는 root document에 있다.
GET /my_index/blogpost/_search { "size" : 0, "aggs": { "comments": { "nested": { "path": "comments" }, "aggs": { "age_group": { "histogram": { "field": "comments.age", "interval": 10 }, "aggs": { "blogposts": { "reverse_nested": {}, "aggs": { "tags": { "terms": { "field": "tags" } } } } } } } } } }
| |
| |
| |
|
The abbreviated results show us the following:
결과는 아래와 같다.
.. "aggregations": { "comments": { "doc_count": 4, "age_group": { "buckets": [ { "key": 20, "doc_count": 2, "blogposts": { "doc_count": 2, "tags": { "doc_count_error_upper_bound": 0, "buckets": [ { "key": "shares", "doc_count": 2 }, { "key": "cash", "doc_count": 1 }, { "key": "equities", "doc_count": 1 } ] } } }, ...
When to Use Nested Objectsedit
Nested objects are useful when there is one main entity, like our blogpost
, with a limited number of closely related but less important entities, such as comments. It is useful to be able to find blog posts based on the content of the comments, and the nested
query and filter provide for fast query-time joins.
nested objects는 댓글처럼 조금 밀접하게 연관된, 하지만 덜 중요한 entity를 가진, 블로그 게시물처럼 하나의 주요 entity가 있을 때 유용하다. 댓글의 내용을 기준으로 블로그 게시물을 찾을 때 유용하다. 그리고 nested
query와 filter는 검색 시에 join이 빠르다.
The disadvantages of the nested model are as follows:
nested 모델의 단점은 아래와 같다.
To add, change, or delete a nested document, the whole document must be reindexed. This becomes more costly the more nested documents there are.
nested document를 추가, 수정, 삭제하려면, 전체 document가 재색인 되어야 한다. nested document가 많을수록, 더 많은 비용이 발생한다.
Search requests return the whole document, not just the matching nested documents. Although there are plans afoot to support returning the best -matching nested documents with the root document, this is not yet supported.
검색 request는 일치하는 nested document뿐만 아니라, 전체 document를 반환한다. 가장 일치하는 nested document를 root document와 함께 반환하는 것을 지원할 계획이 진행 중이지만, 아직은 지원되지 않는다.
Sometimes you need a complete separation between the main document and its associated entities. This separation is provided by the parent-child relationship.
가끔, root document와 관련된 entity를 완전히 구분해야 하는 경우가 있다. 이러한 구분은 parent-child relationship 으로 가능하다.
'2.X > 6. Modeling Your Data' 카테고리의 다른 글
6-2-2. Querying a Nested Object (0) | 2017.09.23 |
---|---|
6-2-3. Sorting by Nested Fields (0) | 2017.09.23 |
6-3. Parent-Child Relationship (0) | 2017.09.23 |
6-3-1. Parent-Child Mapping (0) | 2017.09.23 |
6-3-2. Indexing Parents and Children (0) | 2017.09.23 |