我想对文档下的属性值进行最大聚合,该属性是一个复杂对象(键和值)的列表。以下是我的数据:
[{
"id" : "1",
"listItems" :
[
{
"key" : "li1",
"value" : 100
},
{
"key" : "li2",
"value" : 5000
}
]
},
{
"id" : "2",
"listItems" :
[
{
"key" : "li3",
"value" : 200
},
{
"key" : "li2",
"value" : 2000
}
]
}]
当我对“listitems.value”执行嵌套最大聚合时,我希望返回的最大值是200(而不是5000),原因是我希望逻辑首先计算每个文档的listitems下的最小值,然后对该文档执行最大聚合。有可能这样做吗?
谢谢。
2条答案
按热度按时间jv2fixgn1#
搜索查询执行以下聚合:
上的术语聚合
id
领域最小聚集打开
listItems.value
max bucket aggregation是一个同级管道聚合,它用同级聚合中指定度量的最大值标识存储桶,并输出存储桶的值和密钥。请参阅嵌套聚合,以获得有关它的详细说明。
添加索引数据、索引Map、搜索查询和搜索结果的工作示例。
索引Map:
索引数据:
搜索查询:
搜索结果:
nle07wnf2#
最初的帖子提到了嵌套聚合,所以我确信问题是关于嵌套文档的。因为我在看到另一个答案之前就已经找到了解决方案,所以我将把整个问题保留下来,但实际上它的不同之处只是添加了嵌套聚合。
整个过程可以这样解释:
将每个文档放入一个存储桶中。
使用嵌套聚合可以在嵌套文档上进行聚合。
使用
min
聚合以在所有文档嵌套文档中找到最小值,并以此为基础找到文档本身的最小值。最后,使用另一个聚合来计算上一个聚合结果中的最大值。
鉴于此设置:
我可以在请求中使用这些聚合来获得所需的值:
还应该有一个使用脚本来计算max的解决方法-您所需要做的只是在这样的脚本中查找并返回文档中的最小值。