我正在使用一个Elasticsearch索引,其中的数据如下:
"_source": {
"article_number": "123456",
"title": "Example item #1",
"attributes": [
{
"key": "Type",
"value": "Bag"
},
{
"key": "Color",
"value": "Grey"
}
]
},
"_source": {
"article_number": "654321",
"title": "Example item #2",
"attributes": [
{
"key": "Type",
"value": "Bag"
},
{
"key": "Color",
"value": "Red"
}
]
}
我们的目标是在一个页面中动态生成搜索输入,其中每个attributes.key
的唯一值都有一个搜索输入,并且在该输入中,每个attributes.value
的对应值都有一个值。因此,在本例中,我希望呈现一个“Type”输入,它只提供值“Bag”,而“Color”输入提供值“Grey”和“Red”。
我试图通过一个聚合来实现这一点,这个聚合将给予我一个唯一的attributes.key
的所有值的集合沿着一个与每个键相关联的attributes.value
的所有值的数组。
{
[
{
"key": "Type",
"values": [{
"name": "Bag",
"doc_count": 2
}]
},
{
"key": "Color",
"values": [{
"name": "Grey",
"doc_count": 1
},
{
"name": "Red",
"doc_count": 1
}]
}
}
我已经尝试了嵌套和反向嵌套聚合,以及复合聚合,但到目前为止还没有成功。
1条答案
按热度按时间tktrz96b1#
假设您的索引Map如下所示:
您可以使用nested
terms
aggregation及其子聚合的以下组合来获得所需的结果: