原英文版地址: https://www.elastic.co/guide/en/elasticsearch/reference/7.7/search-aggregations-bucket-parent-aggregation.html, 原文档版权归 www.elastic.co 所有
本地英文版地址: ../en/search-aggregations-bucket-parent-aggregation.html
本地英文版地址: ../en/search-aggregations-bucket-parent-aggregation.html
重要: 此版本不会发布额外的bug修复或文档更新。最新信息请参考 当前版本文档。
一个特殊的单桶聚合,它选择具有指定类型的父文档,如join
字段中定义的那样。
这个聚合只有一个选项:
-
type
- 应该选择的子类型。
例如,假设我们有一个问答索引。答案(answer)的类型在映射中有一个join
字段,如下所示:
PUT parent_example { "mappings": { "properties": { "join": { "type": "join", "relations": { "question": "answer" } } } } }
question
文档包含一个 tag 字段,answer
文档包含一个 owner 字段。
使用parent
聚合,即使两个字段存在于两种不同类型的文档中,也可以在单个请求中将 owner 桶映射到 tag 桶。
问题(question
)文档的示例:
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" ] }
答案(answer
)文档的示例:
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" }
可以构建以下请求,将两者连接在一起:
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 } } } } } } } }
上面的例子返回了前几个答案的所有者(owner)和每个所有者的前几个问题的标签(tag)。
响应可能是:
{ "took": 9, "timed_out": false, "_shards": { "total": 1, "successful": 1, "skipped": 0, "failed": 0 }, "hits": { "total" : { "value": 3, "relation": "eq" }, "max_score": null, "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 } ] } } } ] } } }