原英文版地址: 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 } } } }