我们在使用 Elasticsearch 的 DSL 进行搜索时,使用了 aggs 实现了 group 聚合搜索后,还可以再次使用 avg 对结果求平均数。
GET /indexname/_search { "aggs": { "retrurnName": { "terms": { "field": "fieldname" }, "aggs" : { "avgReturnName" : { "avg" : { "field" : "avgField" } } } } } }
参数 | 描述 |
---|---|
indexname | 需要搜索的索引名 |
retrurnName | 聚合结果返回的字段名 |
fieldname | 需要聚合的字段 |
avgReturnName | 返回的平均值字段 |
avgField | 需要计算的平均值的字段 |
聚合之后,使用 avg 对结果求平均值。
我们在 Kibana 的控制台上,输入以下代码,新建一个文档:
PUT /haicodernet/_doc/1 { "index":"www.haicoder.net", "name" : "javascript", "desc" : "javascript module", "categorys" : 5, "author" : "jobs steven", "tags": [ "javascript", "vue" ] }
输入完成后,我们点击运行按钮,输出了最终的运行结果,如下图所示:
我们看到,此时我们创建文档成功了,现在,我们再次输入以下代码,再次创建一条文档:
PUT /haicodernet/_doc/2 { "index":"www.haicoder.net", "name" : "javascript", "desc" : "javascript module", "categorys" : 10, "author" : "william", "tags": [ "javascript", "dom" ] }
输入完成后,我们点击运行按钮,输出了最终的运行结果,如下图所示:
同样,我们再次创建一条记录,使用如下命令:
PUT /haicodernet/_doc/3 { "index":"www.haicoder.net", "name" : "server", "desc" : "server module", "categorys" : 14, "author" : "jobs steven", "tags": [ "server", "linux" ] }
输入完成后,我们点击运行按钮,输出了最终的运行结果,如下图所示:
现在,我们首先对 name 字段开启聚合操作,具体命令如下:
PUT haicodernet/_mapping { "properties": { "name": { "type": "text", "fielddata": true } } }
输入完成后,我们点击运行按钮,输出了最终的运行结果,如下图所示:
现在,我们使用 DSL 进行分组后再求平均数,具体命令如下:
GET /haicodernet/_search { "aggs": { "group_ret": { "terms": { "field": "name" }, "aggs" : { "avg_category" : { "avg" : { "field" : "categorys" } } } } } }
输入完成后,我们点击运行按钮,输出了最终的运行结果,如下图所示:
我们看到,我们最终以 group_ret 为键,返回了聚合的结果,并且以 avg_category 为键,返回了最终的平均值。
使用了 aggs 实现了 group 聚合搜索后,还可以再次使用 avg 对结果求平均数。