Ответ 1
По внешнему виду ваш tags
не nested
.
Чтобы эта агрегация работала, вам понадобится nested
, чтобы была связь между id
и a name
. Без nested
список id
- это просто массив, а список name
- это другой массив:
"item": {
"properties": {
"meta": {
"properties": {
"tags": {
"type": "nested", <-- nested field
"include_in_parent": true, <-- to, also, keep the flat array-like structure
"properties": {
"id": {
"type": "integer"
},
"name": {
"type": "string"
}
}
}
}
}
}
}
Также обратите внимание, что я добавил к отображению этой строки "include_in_parent": true
, что означает, что тэги nested
также будут вести себя как "плоская" структура, подобная массиву.
Итак, все, что у вас было до сих пор в ваших запросах, по-прежнему будет работать без каких-либо изменений в запросах.
Но для этого конкретного вашего запроса агрегация должна измениться примерно на следующее:
{
"aggs": {
"baked_goods": {
"nested": {
"path": "item.meta.tags"
},
"aggs": {
"name": {
"terms": {
"field": "item.meta.tags.id"
},
"aggs": {
"name": {
"terms": {
"field": "item.meta.tags.name"
}
}
}
}
}
}
}
}
И результат будет таким:
"aggregations": {
"baked_goods": {
"doc_count": 9,
"name": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": 123,
"doc_count": 3,
"name": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "biscuits",
"doc_count": 3
}
]
}
},
{
"key": 456,
"doc_count": 2,
"name": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "cakes",
"doc_count": 2
}
]
}
},
.....