NOTE: You are looking at documentation for an older release. For the latest information, see the current release documentation.
Children Aggregation
editChildren Aggregation
editA special single bucket aggregation that selects child documents that have the specified type, as defined in a join
field.
This aggregation has a single option:
-
type
- The child type that should be selected.
For example, let’s say we have an index of questions and answers. The answer type has the following join
field in the mapping:
PUT child_example { "mappings": { "_doc": { "properties": { "join": { "type": "join", "relations": { "question": "answer" } } } } } }
The question
document contain a tag field and the answer
documents contain an owner field. With the children
aggregation the tag buckets can be mapped to the owner buckets in a single request even though the two fields exist in
two different kinds of documents.
An example of a question document:
PUT child_example/_doc/1 { "join": { "name": "question" }, "body": "<p>I have Windows 2003 server and i bought a new Windows 2008 server...", "title": "Whats the best way to file transfer my site from server to a newer one?", "tags": [ "windows-server-2003", "windows-server-2008", "file-transfer" ] }
Examples of answer
documents:
PUT child_example/_doc/2?routing=1 { "join": { "name": "answer", "parent": "1" }, "owner": { "location": "Norfolk, United Kingdom", "display_name": "Sam", "id": 48 }, "body": "<p>Unfortunately you're pretty much limited to FTP...", "creation_date": "2009-05-04T13:45:37.030" } PUT child_example/_doc/3?routing=1&refresh { "join": { "name": "answer", "parent": "1" }, "owner": { "location": "Norfolk, United Kingdom", "display_name": "Troll", "id": 49 }, "body": "<p>Use Linux...", "creation_date": "2009-05-05T13:45:37.030" }
The following request can be built that connects the two together:
POST child_example/_search?size=0 { "aggs": { "top-tags": { "terms": { "field": "tags.keyword", "size": 10 }, "aggs": { "to-answers": { "children": { "type" : "answer" }, "aggs": { "top-names": { "terms": { "field": "owner.display_name.keyword", "size": 10 } } } } } } } }
The above example returns the top question tags and per tag the top answer owners.
Possible response:
{ "took": 25, "timed_out": false, "_shards": { "total": 5, "successful": 5, "skipped" : 0, "failed": 0 }, "hits": { "total": 3, "max_score": 0.0, "hits": [] }, "aggregations": { "top-tags": { "doc_count_error_upper_bound": 0, "sum_other_doc_count": 0, "buckets": [ { "key": "file-transfer", "doc_count": 1, "to-answers": { "doc_count": 2, "top-names": { "doc_count_error_upper_bound": 0, "sum_other_doc_count": 0, "buckets": [ { "key": "Sam", "doc_count": 1 }, { "key": "Troll", "doc_count": 1 } ] } } }, { "key": "windows-server-2003", "doc_count": 1, "to-answers": { "doc_count": 2, "top-names": { "doc_count_error_upper_bound": 0, "sum_other_doc_count": 0, "buckets": [ { "key": "Sam", "doc_count": 1 }, { "key": "Troll", "doc_count": 1 } ] } } }, { "key": "windows-server-2008", "doc_count": 1, "to-answers": { "doc_count": 2, "top-names": { "doc_count_error_upper_bound": 0, "sum_other_doc_count": 0, "buckets": [ { "key": "Sam", "doc_count": 1 }, { "key": "Troll", "doc_count": 1 } ] } } } ] } } }