原英文版地址: https://www.elastic.co/guide/en/elasticsearch/reference/7.7/search-aggregations-bucket-nested-aggregation.html, 原文档版权归 www.elastic.co 所有
本地英文版地址: ../en/search-aggregations-bucket-nested-aggregation.html
本地英文版地址: ../en/search-aggregations-bucket-nested-aggregation.html
重要: 此版本不会发布额外的bug修复或文档更新。最新信息请参考 当前版本文档。
一个特殊的单桶聚合,可以聚合嵌套(nested)文档。
例如,假设我们有一个产品索引,每个产品都有一个经销商列表——每个经销商都有自己的产品价格。映射(maping)可能是这样的:
PUT /products
{
"mappings": {
"properties" : {
"resellers" : {
"type" : "nested",
"properties" : {
"reseller" : { "type" : "text" },
"price" : { "type" : "double" }
}
}
}
}
}
下面这个请求添加了一个产品,这个产品有两个经销商:
PUT /products/_doc/0
{
"name": "LED TV",
"resellers": [
{
"reseller": "companyA",
"price": 350
},
{
"reseller": "companyB",
"price": 500
}
]
}
下面这个请求返回产品的最低购买价格:
GET /products/_search
{
"query" : {
"match" : { "name" : "led tv" }
},
"aggs" : {
"resellers" : {
"nested" : {
"path" : "resellers"
},
"aggs" : {
"min_price" : { "min" : { "field" : "resellers.price" } }
}
}
}
}
正如你在上面看到的,nested 聚合需要顶层文档中嵌套文档的路径(path)。
然后可以在这些嵌套文档上定义任何类型的聚合。
响应:
{
...
"aggregations": {
"resellers": {
"doc_count": 2,
"min_price": {
"value": 350
}
}
}
}