更新时间:2023-02-19 08:47:18
它的外观,您的标签
不是嵌套
。
要使此聚合工作,您需要它嵌套
,以便 id
和名称
。没有嵌套
id
的列表只是一个数组,名称
s是另一个数组:
By the looks of it, your tags
is not nested
.
For this aggregation to work, you need it nested
so that there is an association between an id
and a name
. Without nested
the list of id
s is just an array and the list of name
s is another array:
"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
这意味着您的嵌套
标签也将像平面结构。
Also, note that I've added to the mapping this line "include_in_parent": true
which means that your nested
tags will, also, behave like a "flat" array-like structure.
所以,你在查询中到目前为止的所有内容仍然可以在没有任何更改查询的情况下工作。
So, everything you had so far in your queries will still work without any changes to the queries.
但是,对于这个特定的查询聚合需要改变为这样的一种:
But, for this particular query of yours, the aggregation needs to change to something like this:
{
"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
}
]
}
},
.....