elasticsearch/elasticsearch — pull request #6936 by martijnvg (2014-07-21 07:29:08+00:00)
Title: Aggregations: Add children aggregation

Add `children` bucket aggregation that is able to map buckets between parent types and child types based on top of the parent/child support. It is the equivalent of the has_child filter/query in the query dsl.

Example request:
```json
GET /stack/question/_search?search_type=count
{
"aggs": {
"top-tags": {
"terms": {
"field": "tags",
"size": 10
},
"aggs": {
"to-answers": {
"children": {
"child_type" : "answer"
},
"aggs": {
"top-names": {
"terms": {
"field": "owner_display_name",
"size": 10
}
}
}
}
}
}
}
}
```

Example response:
```json
{
"took": 90,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 175275,
"max_score": 0,
"hits": []
},
"aggregations": {
"top-tags": {
"buckets": [
{
"key": "windows-7",
"doc_count": 25365,
"to-answers": {
"doc_count": 36004,
"top-names": {
"buckets": [
{
"key": "molly7244",
"doc_count": 274
},
{
"key": "chris",
"doc_count": 19
},
{
"key": "david",
"doc_count": 14
},
{
"key": "dan",
"doc_count": 12
},
{
"key": "james",
"doc_count": 7
},
{
"key": "b",
"doc_count": 5
},
{
"key": "alex",
"doc_count": 4
},
{
"key": "peter",
"doc_count": 4
},
{
"key": "s",
"doc_count": 4
},
{
"key": "cody",
"doc_count": 3
}
]
}
}
},
{
"key": "linux",
"doc_count": 18342,
"to-answers": {
"doc_count": 6655,
"top-names": {
"buckets": [
{
"key": "abrams",
"doc_count": 25
},
{
"key": "ignacio",
"doc_count": 25
},
{
"key": "vazquez",
"doc_count": 25
},
{
"key": "chris",
"doc_count": 9
},
{
"key": "michael",
"doc_count": 7
},
{
"key": "basile",
"doc_count": 6
},
{
"key": "david",
"doc_count": 6
},
{
"key": "alex",
"doc_count": 4
},
{
"key": "botykai",
"doc_count": 3
},
{
"key": "paul",
"doc_count": 3
}
]
}
}
},
{
"key": "windows",
"doc_count": 18119,
"to-answers": {
"doc_count": 24051,
"top-names": {
"buckets": [
{
"key": "molly7244",
"doc_count": 265
},
{
"key": "david",
"doc_count": 27
},
{
"key": "chris",
"doc_count": 26
},
{
"key": "diago",
"doc_count": 9
},
{
"key": "john",
"doc_count": 7
},
{
"key": "paxdiablo",
"doc_count": 7
},
{
"key": "ben",
"doc_count": 6
},
{
"key": "mark",
"doc_count": 6
},
{
"key": "adam",
"doc_count": 5
},
{
"key": "c",
"doc_count": 5
}
]
}
}
},
{
"key": "osx",
"doc_count": 10971,
"to-answers": {
"doc_count": 5902,
"top-names": {
"buckets": [
{
"key": "diago",
"doc_count": 4
},
{
"key": "albert",
"doc_count": 3
},
{
"key": "asmus",
"doc_count": 3
},
{
"key": "molly7244",
"doc_count": 3
},
{
"key": "aaron",
"doc_count": 2
},
{
"key": "abizern",
"doc_count": 2
},
{
"key": "adam",
"doc_count": 2
},
{
"key": "duskwuff",
"doc_count": 2
},
{
"key": "johnsyweb",
"doc_count": 2
},
{
"key": "mark",
"doc_count": 2
}
]
}
}
},
{
"key": "ubuntu",
"doc_count": 8743,
"to-answers": {
"doc_count": 8784,
"top-names": {
"buckets": [
{
"key": "ignacio",
"doc_count": 9
},
{
"key": "abrams",
"doc_count": 8
},
{
"key": "molly7244",
"doc_count": 8
},
{
"key": "david",
"doc_count": 7
},
{
"key": "pate",
"doc_count": 6
},
{
"key": "roger",
"doc_count": 6
},
{
"key": "chris",
"doc_count": 5
},
{
"key": "vazquez",
"doc_count": 5
},
{
"key": "paul",
"doc_count": 3
},
{
"key": "rob",
"doc_count": 3
}
]
}
}
},
{
"key": "windows-xp",
"doc_count": 7517,
"to-answers": {
"doc_count": 13610,
"top-names": {
"buckets": [
{
"key": "molly7244",
"doc_count": 232
},
{
"key": "chris",
"doc_count": 9
},
{
"key": "john",
"doc_count": 9
},
{
"key": "david",
"doc_count": 8
},
{
"key": "dave",
"doc_count": 5
},
{
"key": "b",
"doc_count": 4
},
{
"key": "bart",
"doc_count": 4
},
{
"key": "joeqwerty",
"doc_count": 4
},
{
"key": "mike",
"doc_count": 4
},
{
"key": "s",
"doc_count": 4
}
]
}
}
},
{
"key": "networking",
"doc_count": 6739,
"to-answers": {
"doc_count": 2076,
"top-names": {
"buckets": [
{
"key": "molly7244",
"doc_count": 6
},
{
"key": "alnitak",
"doc_count": 5
},
{
"key": "chris",
"doc_count": 3
},
{
"key": "albin",
"doc_count": 2
},
{
"key": "brian",
"doc_count": 2
},
{
"key": "everett",
"doc_count": 2
},
{
"key": "fishdump",
"doc_count": 2
},
{
"key": "m",
"doc_count": 2
},
{
"key": "mike",
"doc_count": 2
},
{
"key": "p",
"doc_count": 2
}
]
}
}
},
{
"key": "mac",
"doc_count": 5590,
"to-answers": {
"doc_count": 999,
"top-names": {
"buckets": [
{
"key": "abrams",
"doc_count": 2
},
{
"key": "ignacio",
"doc_count": 2
},
{
"key": "vazquez",
"doc_count": 2
},
{
"key": "adam",
"doc_count": 1
},
{
"key": "anon",
"doc_count": 1
},
{
"key": "aravindhanarvi",
"doc_count": 1
},
{
"key": "arkaaito",
"doc_count": 1
},
{
"key": "ballard",
"doc_count": 1
},
{
"key": "bart",
"doc_count": 1
},
{
"key": "ben",
"doc_count": 1
}
]
}
}
},
{
"key": "wireless-networking",
"doc_count": 4409,
"to-answers": {
"doc_count": 6497,
"top-names": {
"buckets": [
{
"key": "molly7244",
"doc_count": 61
},
{
"key": "chris",
"doc_count": 5
},
{
"key": "mike",
"doc_count": 5
},
{
"key": "tom",
"doc_count": 5
},
{
"key": "bart",
"doc_count": 4
},
{
"key": "user48838",
"doc_count": 4
},
{
"key": "alex",
"doc_count": 2
},
{
"key": "anon31097",
"doc_count": 2
},
{
"key": "joeqwerty",
"doc_count": 2
},
{
"key": "kevin",
"doc_count": 2
}
]
}
}
},
{
"key": "windows-8",
"doc_count": 3601,
"to-answers": {
"doc_count": 4263,
"top-names": {
"buckets": [
{
"key": "molly7244",
"doc_count": 3
},
{
"key": "msft",
"doc_count": 2
},
{
"key": "user172132",
"doc_count": 2
},
{
"key": "aj",
"doc_count": 1
},
{
"key": "algorithms",
"doc_count": 1
},
{
"key": "andersson",
"doc_count": 1
},
{
"key": "ashafiee",
"doc_count": 1
},
{
"key": "balakrishnan",
"doc_count": 1
},
{
"key": "bobby",
"doc_count": 1
},
{
"key": "brockschmidt",
"doc_count": 1
}
]
}
}
}
]
}
}
}
```