我需要一种方法来创建一个转换,它将聚集一个字段的平均值,但没有异常值(假设只有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”
发布于 2020-12-31 12:51:17
你可以用一个一次完成这个,但是你必须编写百分位数函数,然后是avg函数--我写了一个这里。但是这个脚本不会有表现力,所以我不认为它值得…的努力
相反,我建议首先检索百分位界
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,这取决于正在遍历的特定文档是否是异常值。
https://stackoverflow.com/questions/65518140
复制相似问题