mirror of
https://github.com/elastic/elasticsearch.git
synced 2025-06-29 01:44:36 -04:00
* delete asciidoc files
* add migrated files
* fix errors
* Disable docs tests
* Clarify release notes page titles
* Revert "Clarify release notes page titles"
This reverts commit 8be688648d
.
* Comment out edternal URI images
* Clean up query languages landing pages, link to conceptual docs
* Add .md to url
* Fixes inference processor nesting.
---------
Co-authored-by: Liam Thompson <32779855+leemthompo@users.noreply.github.com>
Co-authored-by: Liam Thompson <leemthompo@gmail.com>
Co-authored-by: Martijn Laarman <Mpdreamz@gmail.com>
Co-authored-by: István Zoltán Szabó <szabosteve@gmail.com>
3 KiB
3 KiB
navigation_title | mapped_pages | |
---|---|---|
Nested |
|
Nested aggregation [search-aggregations-bucket-nested-aggregation]
A special single bucket aggregation that enables aggregating nested documents.
For example, lets say we have an index of products, and each product holds the list of resellers - each having its own price for the product. The mapping could look like:
$$$nested-aggregation-example$
PUT /products
{
"mappings": {
"properties": {
"resellers": { <1>
"type": "nested",
"properties": {
"reseller": {
"type": "keyword"
},
"price": {
"type": "double"
}
}
}
}
}
}
resellers
is an array that holds nested documents.
The following request adds a product with two resellers:
PUT /products/_doc/0?refresh
{
"name": "LED TV", <1>
"resellers": [
{
"reseller": "companyA",
"price": 350
},
{
"reseller": "companyB",
"price": 500
}
]
}
- We are using a dynamic mapping for the
name
attribute.
The following request returns the minimum price a product can be purchased for:
GET /products/_search?size=0
{
"query": {
"match": {
"name": "led tv"
}
},
"aggs": {
"resellers": {
"nested": {
"path": "resellers"
},
"aggs": {
"min_price": {
"min": {
"field": "resellers.price"
}
}
}
}
}
}
As you can see above, the nested aggregation requires the path
of the nested documents within the top level documents. Then one can define any type of aggregation over these nested documents.
Response:
{
...
"aggregations": {
"resellers": {
"doc_count": 2,
"min_price": {
"value": 350.0
}
}
}
}
You can use a filter
sub-aggregation to return results for a specific reseller.
GET /products/_search?size=0
{
"query": {
"match": {
"name": "led tv"
}
},
"aggs": {
"resellers": {
"nested": {
"path": "resellers"
},
"aggs": {
"filter_reseller": {
"filter": {
"bool": {
"filter": [
{
"term": {
"resellers.reseller": "companyB"
}
}
]
}
},
"aggs": {
"min_price": {
"min": {
"field": "resellers.price"
}
}
}
}
}
}
}
}
The search returns:
{
...
"aggregations": {
"resellers": {
"doc_count": 2,
"filter_reseller": {
"doc_count": 1,
"min_price": {
"value": 500.0
}
}
}
}
}