Elasticsearch의 Nested Aggregation

6139 단어 elasticsearch
(이것은 작은 시리즈입니다. 스탬프: Elasticsearch의 Nested (끼워넣기) 시리즈, 다른nested 관련 글 보기)
             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 검색을 사용해서 nested object와 접촉해야 하는 것과 마찬가지로, 특정한 nested 집합 역시 nested object 내의 필드를 집합할 수 있습니다.
curl -XGET 'localhost:9200/my_index/blogpost/_search?search_type=count' -d '
{
  "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"
					}
				 }
			  }
		   }
		}
	 }
  }
}

①:The nested aggregation “steps down” into the nested comments object.
nested 집합이 nested 평론 대상에 들어갑니다.
②:Comments are bucketed into months based on the comments.date field.
평론은 주석에 기초한다.date 필드 집합 월
③:The average number of stars is calculated for each bucket.
각 묶음에 대해 성급의 평균치를 계산하다.
The results show that aggregation has happened at the nested document level:
그 결과 집합은 확실히 nested 텍스트 층에서 발생했다.
...
"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 Aggregation
반중첩 집합
 
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 집합은 nested 텍스트 내의 필드만 연결할 수 있으며, 루트 텍스트나 다른 nested 텍스트 내의 필드를 볼 수 없습니다.그러나, 우리는 반접합 집합을 통해nested 국역에서 벗어나 부층으로 들어갈 수 있다.
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:
예를 들어 우리는 평론가의 나이에 근거하여 어떤 라벨이 평론가가 흥미를 느끼는지 찾아낸다.comment.age는 nested 필드이고 tags는 루트 텍스트에 있습니다.
curl -XGET 'localhost:9200/my_index/blogpost/_search?search_type=count' -d '
{
  "aggs":{
     "comments":{
	    "nested":{①
		   "path":"comments"
		},
		"aggs":{
		  "age_group":{
		      "histogram":{②
			     "field":"comments.age",
				 "interval":10
			  },
			  "aggs":{
			     "blogposts":{
				    "reverse_nested":{},③
					"aggs":{
					   "tags":{
					      "terms":{④
						     "field":"tags"
						  }
					   }
					}
				 }
			  }
		  }
		}
	  }
    }		
}

②:The histogram agg groups on the comments.age field, in buckets of 10 years.
histogram(직사각형)은comments에 집합됩니다.age 필드에서 10년마다 그룹을 나눈다.
③:The reverse_nested agg steps back up to the root document.
reverse_nested 집합은 루트 텍스트로 돌아갑니다.
④:The terms agg counts popular terms per age group of the commenter.
terms 집합 계산 각 연령대의 유행 terms.
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 Objects
nested 대상을 언제 사용합니까?
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.
주요 실체, 예를 들어blogpost(블로그 글), 그리고 유한한 관련이 있지만 이렇게 중요한 다른 실체가 없다.comments(평론),nested 대상은 매우 유용하다.평론의 내용을 바탕으로 블로그 글을 찾는 것은 가치가 있다.또한 빠른 조회 시간 연결을 위해nested 조회와 필터를 제공합니다.
The disadvantages of the nested model are as follows:
nested 모드의 단점은 다음과 같습니다.
1.To add, change, or delete a nested document, the whole document must be reindexed. This becomes more costly the more nested
 documents there are.
1. nested 텍스트를 추가하거나 변경하거나 삭제하기 위해 전체 텍스트는 색인을 다시 만들어야 합니다.nested 텍스트가 많을수록 대가가 커집니다.
2.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.
2. 검색 요청은 일치하는 nested 텍스트뿐만 아니라 전체 텍스트로 되돌아옵니다.루트 텍스트를 되돌리는 동시에 가장 일치하는nested 텍스트를 되돌릴 수 있도록 실행 중이지만, 아직 실현되지 않았습니다.
원문:http://www.elastic.co/guide/en/elasticsearch/guide/master/nested-aggregation.html

좋은 웹페이지 즐겨찾기