elasticsearch - 有什么方法可以汇总没有异常值的弹性平均值?
问题描述
我需要一种方法来创建一个转换,该转换将聚合一个字段的平均值但没有异常值(假设只有介于 10%-90% 百分位数之间的值)。例如,如果我有以下文件:
[
{someField:1},
{someField:2},
{someField:3},
{someField:4},
{someField:5},
{someField:6},
{someField:7},
{someField:8},
{someField:9},
{someField:10}
]
它将计算 2-9 的平均值
编辑:将“value”重命名为“someField”
解决方案
您可以通过聚合一次性完成此操作,但您必须编写 percentiles 函数,然后编写 avg 函数——我在这里编写了一个。但是脚本不会高效,所以我认为不值得付出努力……</p>
scripted_metric
相反,我建议先检索百分位界限:
POST myindex/_search
{
"size": 0,
"aggs": {
"boundaries": {
"percentiles": {
"field": "value",
"percents": [
10,
90
]
}
}
}
}
产生[1.5, 9.5]
然后将这些数字插入加权平均聚合中:
POST myindex/_search
{
"size": 0,
"aggs": {
"avg_without_outliers": {
"weighted_avg": {
"value": {
"field": "value"
},
"weight": {
"script": {
"source": "def v = doc.value.value; return v <= params.min || v >= params.max ? 0 : 1",
"params": {
"min": 1.5,
"max": 9.5
}
}
}
}
}
}
}
是weight
0 或 1,取决于被遍历的特定文档是否是异常值。
推荐阅读
- php - JSON UNESCAPED UNICODE 不适用于 Laravel Nova 管理面板中的文本字段
- firebase-cloud-messaging - Firebase 静默通知不适用于 iOS13
- vidyo - Vidyo.io 相机和麦克风无法在 chrome 上运行
- python - Python - 检查列表中的单词是否是另一个字符串的子字符串
- arrays - 从类型联合创建唯一数组项的联合(打字稿)
- c# - 如何在控制台项目中使用创建 DataContext 实例?
- python - 我想使用csv文件中的beautifulsoup遍历一些链接
- python - 为什么当我切换到颜色时,我的 pyopencl 图像处理停止工作?
- mongodb - 如何高效获取各组的最新文档?
- r - 为什么网站帖子上没有更新更改?