elasticsearch - 如何在 bucket_script 中使用父级的兄弟存储桶路径?
问题描述
我想在存储桶脚本中使用父级的兄弟存储桶路径,DSL 如下:
{
"size": 0,
"aggs": {
"car_type": {
"terms": {
"field": "screenName",
"size": 10
},
"aggs": {
"active_num": {
"terms": {
"field": "activeNum",
"size": 10
},
"aggs": {
"active_count": {
"value_count": {
"field": "activeNum"
}
},
"result" : {
"bucket_script": {
"buckets_path": {
"count1" : "car_type>all_count",
"count2" : "active_count"
},
"script": "params.count2/params.count1"
}
}
}
},
"all_count": {
"value_count": {
"field": "activeNum"
}
}
}
}
}
}
我想用all_count
in result
,但是 es 会抛出异常:
未找到路径 [car_type>all_count] 的聚合
然后,我改变了使用bucket_script的地方,像这样:
{
"size": 0,
"aggs": {
"car_type": {
"terms": {
"field": "screenName",
"size": 10
},
"aggs": {
"active_num": {
"terms": {
"field": "activeNum",
"size": 10
},
"aggs": {
"active_count": {
"value_count": {
"field": "activeNum"
}
}
}
},
"all_count": {
"value_count": {
"field": "activeNum"
}
},
"result" : {
"bucket_script": {
"buckets_path": {
"count1" : "all_count",
"count2" : "active_num>active_count"
},
"script": "params.count2/params.count1"
}
}
}
}
}
}
但我得到另一个例外:
buckets_path 必须引用数字值或单值数字度量聚合,得到:java.lang.Object[]
我找到了官方网站页面,但我什么也没得到。我该如何使用这个 bucket_path?
解决方案
使用以下方法可以解决一些问题:
{
"size": 0,
"aggs": {
"car_type": {
"terms": {
"field": "screenName",
"size": 10
},
"aggs": {
"active_num": {
"filter": {
"term": {
"activeNum": "1"
}
},
"aggs": {
"active_count": {
"value_count": {
"field": "activeNum"
}
}
}
},
"all_count": {
"value_count": {
"field": "activeNum"
}
},
"result" : {
"bucket_script": {
"buckets_path": {
"count1" : "all_count",
"count2" : "active_num>active_count"
},
"script": "params.count2/params.count1"
}
}
}
}
}
}
但是还是有一些问题,这种方法只能得到一个值的结果,不能得到这个字段的每一个值。那么,谁还有其他想法?
推荐阅读
- mongodb - unix时间戳列时如何按日期对文档进行分组?
- c# - 如何在 C# Coding (Visual Studio) 中添加退出或重试
- c# - 我如何允许 C# 应用程序连接到 Azure SQL 数据库而不必每次都将 IP 地址添加到防火墙
- reactjs - 如何将环境变量读入 react js 应用程序?
- sql - PostgreSQL 是否实现了多表索引?
- azure-devops - 通过 REST API 或 CLI 使用 Azure Devops 访问管道故障阶段信息
- java - 从 Fragment 将二维数组传递给 Activity(Android Studio、Java)
- c# - 覆盖共享文件中的图像
- xcode - 有什么方法可以在不使用 sudo 的情况下切换 Xcode 版本?
- javascript - 如何使用javascript中的按钮从计时器中添加和减去时间