• 1.2.2 가 릴리즈 된지 몇 주 안 지난것 같은데, 이틀 전에 1.3.0 이 릴리즈 되었다.
  • 1.3.0 에 top hits aggregation 이 추가 되었다.
  • 간단히 설명하면 aggregated 된 bucket 들 별로, sub aggregator 를 사용할 수 있다고 생각하면 된다.

e.g. tags 필드로 그룹화 하고, 각 그룹별로 최신의 active 문서만 가져오는 쿼리

(각 질문은 source 에서 title 필드만 가져옴)

{
    "aggs": {
        "terms": {
            "top-tags": {
                "field": "tags",
                "size": 3
            },
            "aggs": {
                "top_tag_hits": {
                    "top_hits": {
                        "sort": [
                            {
                                "last_activity_date": {
                                    "order": "desc"
                                }
                            }
                        ],
                        "_source": {
                            "include": [
                                "title"
                            ]
                        },
                        "size" : 1
                    }
                }
            }
        }
    }
}

아래와 같이 응답한다.

"aggregations": {
  "top-tags": {
     "buckets": [
        {
           "key": "windows-7",
           "doc_count": 25365,
           "top_tags_hits": {
              "hits": {
                 "total": 25365,
                 "max_score": 1,
                 "hits": [
                    {
                       "_index": "stack",
                       "_type": "question",
                       "_id": "602679",
                       "_score": 1,
                       "_source": {
                          "title": "Windows port opening"
                       },
                       "sort": [
                          1370143231177
                       ]
                    }
                 ]
              }
           }
        },
        { ... },
        { ... }
     ]
  }
}

e.g. body 필드에 “elections” 가 포함된 문서를 domain 필드를 기준으로 그룹화하는 예제 (각 domain 별로 score 를 기준으로 정렬)

  • domain 필드에 terms aggregator 를 정의해서 domain 로 그룹화한다.
  • max aggregatorterms aggregator 의 순서를 bucket 내에서 score 로 정렬하기 위한 sub-aggregator 이다.

쿼리:

{
  "query": {
    "match": {
      "body": "elections"
    }
  },
  "aggs": {
    "top-sites": {
      "terms": {
        "field": "domain",
        "order": {
          "top_hit": "desc"
        }
      },
      "aggs": {
        "top_tags_hits": {
          "top_hits": {}
        },
        "top_hit" : {
          "max": {
            "script": "_doc.score"
          }
        }
      }
    }
  }
}