我需要对数据子字符串执行avg()。 ES有可能吗? 这是我的剧本
{
"size": 0
,"query": {
"bool": {
"must": [
{ "term": {"app": "att"} }
]
}
}
,"aggs": {
"clients": {
"terms": {"field": "client"}
,"aggs" : {
"_avg_" : { "avg" : { "field" : "ms" } }
}
}
}
}
问题在于" _ms"看起来像:
It took: 100 ms ......
It took: 104 ms ......
It took: 102 ms ......
所以,在我做之前我必须拉100,104,102等等#av;"
答案 0 :(得分:0)
如果您无法重新索引数据并且绝对“必须”使用该数据,则可以在script
聚合中使用avg
。由于您没有那么多数据,性能不会受到太大影响。
您可以使用的Groovy脚本只是doc['ms'].value as Integer
,它会将字符串强制转换为整数,并使用整数值来执行平均值。
{
"size": 0,
"query": {
"bool": {
"must": [
{
"term": {
"app": "att"
}
}
]
}
},
"aggs": {
"clients": {
"terms": {
"field": "client"
},
"aggs": {
"_avg_": {
"avg": {
"script": "doc['ms'].value as Integer"
}
}
}
}
}
}
请注意,要执行此查询,您需要enable dynamic scripting