我有以下数据集
[
{
"rating": "10",
"subject": "maths"
},
{
"rating": "9",
"subject": "physics"
},
{
"rating": "10",
"subject": "chemistry"
},
{
"rating": "5",
"subject": "physics"
},
{
"rating": "2",
"subject": "geography"
},
{
"rating": "5",
"subject": "maths"
},
{
"rating": "1",
"subject": "geography"
},
{
"rating": "5",
"subject": "maths"
},
{
"rating": "8",
"subject": "chemistry"
}
] 我需要做的是找出每个主题的平均评分,然后用弹性搜索查询计算出评级范围内的主体# (0-2,2-5,5-8,8-10)。
到目前为止,我的查询为每个主题创建了桶,计算每个桶的avg。但我无法找到如何对复合聚合的结果进行范围聚合。有可能吗?还有别的选择吗?
这里是我的查询,它根据主题对数据进行存储,并计算avg评级。
GET kibana_sample/_search
{
"size":0,
"aggs" : {
"my_buckets": {
"composite" : {
"sources" : [
{ "subject": { "terms" : { "field": "subject" } } }
]
},
"aggs": {
"avg_rating": {
"avg" : { "field" : "rating" }
}
}
}
}
} 其结果如下。
"aggregations": {
"my_buckets": {
"buckets": [
{
"key": {
"subject": "maths"
},
"doc_count": 3,
"avg_rating": {
"value": 6.66666667
}
},
{
"key": {
"subject": "physics"
},
"doc_count": 2,
"avg_rating": {
"value": 7
}
},
{
"key": {
"subject": "chemistry"
},
"doc_count": 2,
"avg_rating": {
"value": 9
}
},
{
"key": {
"subject": "geography"
},
"doc_count": 2,
"avg_rating": {
"value": 1.5
}
}
]
}
}这一切都很好,但现在我需要在这个结果之上执行一个范围聚合,以获得评级范围内的主体数量,例如:
评级范围:{0-2}:1主题,{2-5}:0主题,{5-8}:2主题,{8-10}:1主题
发布于 2019-01-09 10:52:05
您可以使用管道聚合,以便通过更多聚合连接一个聚合结果。您可以做的另一件事是在管道中使用脚本,以便只过滤相关的结果。
查看这里的脚本示例:https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-pipeline.html
https://stackoverflow.com/questions/54103677
复制相似问题