Elasticsearch array value count aggregation
17,010
As you say the attribute field is nested. Try this, this will work
{
"size": 0,
"aggs": {
"count": {
"nested": {
"path": "attributes"
},
"aggs": {
"attribCount": {
"terms": {
"field": "attributes.name"
}
},
"attribVal": {
"terms": {
"field": "attributes.name"
},
"aggs": {
"attribval2": {
"terms": {
"field": "attributes.value"
}
}
}
}
}
}
}
}
Author by
Sriram
Updated on June 06, 2022Comments
-
Sriram almost 2 years
Sample documents:
{ "id": "62655", "attributes": [ { "name": "genre", "value": "comedy" }, { "name": "year", "value": "2016" } ] } { "id": "62656", "attributes": [ { "name": "genre", "value": "horror" }, { "name": "year", "value": "2016" } ] } { "id": "62657", "attributes": [ { "name": "language", "value": "english" }, { "name": "year", "value": "2015" } ] }
Expected Output:
{ "hits" : { "total": 3, "hits": [] }, "aggregations": { "attribCount": { "language": 1, "genre": 2, "year": 3 }, "attribVals": { "language": { "english": 1 }, "genre": { "comedy": 1, "horror": 1 }, "year": { "2016": 2, "2015": 1 } } } }
My Query:
I could get the "attribCount" aggregation using below query. But I don't know how to get each attribute value count.
{ "query": { "filtered": { "query": { "match_all": {} } } }, "aggs": { "attribCount": { "terms": { "field": "attributes.name", "size": 0 } } }, "size": 0 }
When I aggregate using attributes.value, it gives overall count. But I need it listed under the name value as given in expected output.