平均值、总和、最大、最小、数量

在es中,所有的聚合查询都是放在aggs中进行的。平均值、总和、最大、最小、数量对应的关键字分别是:avg、sum、max、min、value_count

POST /bank/_search
{
	"query": {
		"match": {
			"address": "mill"
		}
	},
	"aggs": {
		"ageAvg": {
			"avg": {
				"field": "age"
			}
		},
		"ageSum": {
			"sum": {
				"field": "age"
			}
		},
		"ageMax":{
		  "max": {
		    "field": "age"
		  }
		},
		"ageMin":{
		  "min": {
		    "field": "age"
		  }
		},
		"ageCount":{
		  "value_count": {
		    "field": "age"
		  }
		}
	},
	"size": 0
}

在这里插入图片描述

分组

分组用到的关键字是terms

POST /bank/_search
{
	"query": {
		"match": {
			"address": "mill"
		}
	},
	"aggs": {
		"ageGroup": {
			"terms": {
				"field": "age",
				"size": 3
			}
		}
	},
	"size": 0
}

在这里插入图片描述

上面语句中的size:3,指的是分组后,只展示前三个分组内容。size:0,指的是所有query查询结果,也就是原始数据,不需要展示。此外,还可以对分组内容进行排序。
1.分组后,按分组内的文档数量排序

POST /bank/_search
{
	"aggs": {
		"ageGroup": {
			"terms": {
				"field": "age",
				"order": {
				  "_count": "asc"
				}
			}
		}
	},
	"size": 0
}

在这里插入图片描述

2.分组后,按分组字段排序

POST /bank/_search
{
	"aggs": {
		"ageGroup": {
			"terms": {
				"field": "age",
				"order": {
				  "_key": "desc"
				}
			}
		}
	},
	"size": 0
}

在这里插入图片描述

3.显示分组后,文档数量大于60的

POST /bank/_search
{
	"aggs": {
		"ageGroup": {
			"terms": {
				"field": "age",
				"min_doc_count": 60
			}
		}
	},
	"size": 0
}

在这里插入图片描述

分组+子聚合

先按age分组,之后统计分组内的平均值和总和。

POST /bank/_search
{
	"query": {
		"match": {
			"address": "mill"
		}
	},
	"aggs": {
		"ageAgg": {
			"terms": {
				"field": "age",
				"size": 3
			},
			"aggs": {
				"ageAvg": {
					"avg": {
						"field": "age"
					}
				},
				"ageSum": {
					"sum": {
						"field": "age"
					}
				}
			}
		}
	},
	"size": 0
}

在这里插入图片描述

分段分组+子聚合

先按age分组,分成18-28、28-38两组。之后统计各组的最小值和平均值。

POST /bank/_search
{
	"query": {
		"match": {
			"address": "mill Road"
		}
	},
	"aggs": {
		"ageGroup": {
			"range": {
			  "field": "age",
			  "ranges": [
			    {
			      "from": 18,
			      "to": 28
			    },
			    {
			      "from": 28,
			      "to": 38
			    }
			  ]
			},
			"aggs":{
			  "ageMin":{
			    "min": {
			      "field": "age"
			    }
			  },
			  "ageAve":{
			    "avg": {
			      "field": "age"
			    }
			  }
			}
		}
	},
	"size": 0
}

在这里插入图片描述

指定分组+聚合

查询全部,但分组时候,只统计age=30的所有文档的平均值,最大最小等数据,用stats关键字代表。

POST /bank/_search
{
	"aggs": {
		"ageGroup": {
			"filter": {
			  "term": {
			    "age": "30"
			  }
			},
			"aggs": {
			  "stat": {
			    "stats": {
			      "field": "age"
			    }
			  }
			}
		}
	},
	"size": 0
}

在这里插入图片描述

多种聚合结果统一查询

这里的多种聚合,指的是常用的平均值、最大最小、总和等。除了开始讲到的min、max、avg等关键字外,还可以用stats关键字。一个stats就可以包含min/max/avg/sum等。

POST /bank/_search
{
  "query": {
    "range": {
      "age": {
        "gte": 10,
        "lte": 20
      }
    }
  },
  "aggs": {
    "stat": {
      "stats": {
        "field": "age"
      }
    }
  },
  "size": 0
}

在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐