NOTE: You are looking at documentation for an older release. For the latest information, see the current release documentation.
Parent Aggregation
editParent Aggregation
editA special single bucket aggregation that selects parent 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 parent_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 parent
aggregation the owner buckets can be mapped to the tag buckets in a single request even though the two fields exist in
two different kinds of documents.
An example of a question document:
PUT parent_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 parent_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 parent_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 parent_example/_search?size=0 { "aggs": { "top-names": { "terms": { "field": "owner.display_name.keyword", "size": 10 }, "aggs": { "to-questions": { "parent": { "type" : "answer" }, "aggs": { "top-tags": { "terms": { "field": "tags.keyword", "size": 10 } } } } } } } }
The above example returns the top answer owners and per owner the top question tags.
Possible response:
{ "took": 9, "timed_out": false, "_shards": { "total": 5, "successful": 5, "skipped": 0, "failed": 0 }, "hits": { "total": 3, "max_score": 0.0, "hits": [] }, "aggregations": { "top-names": { "doc_count_error_upper_bound": 0, "sum_other_doc_count": 0, "buckets": [ { "key": "Sam", "doc_count": 1, "to-questions": { "doc_count": 1, "top-tags": { "doc_count_error_upper_bound": 0, "sum_other_doc_count": 0, "buckets": [ { "key": "file-transfer", "doc_count": 1 }, { "key": "windows-server-2003", "doc_count": 1 }, { "key": "windows-server-2008", "doc_count": 1 } ] } } }, { "key": "Troll", "doc_count": 1, "to-questions": { "doc_count": 1, "top-tags": { "doc_count_error_upper_bound": 0, "sum_other_doc_count": 0, "buckets": [ { "key": "file-transfer", "doc_count": 1 }, { "key": "windows-server-2003", "doc_count": 1 }, { "key": "windows-server-2008", "doc_count": 1 } ] } } } ] } } }