ElasticSearch聚合数据的子串

时间:2015-11-18 19:30:55

标签: elasticsearch

我需要对数据子字符串执行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;"

1 个答案:

答案 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