以下代码均在Kibana的dev tools下执行
1、创造数据
POST /test_aggs/infos/1?pretty
{
"title":"test class 01",
"price": 20,
"desc": ["good","very","handsome"]
}
POST /test_aggs/infos/2?pretty
{
"title":"test class 02",
"price": 30,
"desc": ["good2","very","handsome"]
}
POST /test_aggs/infos/3?pretty
{
"title":"test class 03",
"price": 50,
"desc": ["good3","very2","handsome"]
}
2、构建聚合函数语句
ES聚合的基本语法
## 示例1:
POST /test_aggs/infos/_search?pretty
{
"size":0,
"query":{"match_all":{}},
"aggs":{
"aggs_terms":{
"min":{
"field":"price"
}
}
}
}
## 示例2:根据title的分词进行分组,计算分数的平均值
PUT /test_aggs/_mapping/infos
{
"properties": {
"title": {
"type": "text",
"fielddata": true
}
}
}
POST /test_aggs/infos/_search?pretty
{
"size":0,
"query":{"match_all":{}},
"aggs":{
"aggs_terms":{
"terms":{
"field":"title"
},
"aggs":{
"aggs_avg":{
"avg":{
"field":"price"
}
}
}
}
}
}
结果:
{
"took": 7,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 3,
"max_score": 0,
"hits": []
},
"aggregations": {
"aggs_terms": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "class",
"doc_count": 3,
"aggs_avg": {
"value": 33.333333333333336
}
},
{
"key": "test",
"doc_count": 3,
"aggs_avg": {
"value": 33.333333333333336
}
},
{
"key": "01",
"doc_count": 1,
"aggs_avg": {
"value": 20
}
},
{
"key": "02",
"doc_count": 1,
"aggs_avg": {
"value": 30
}
},
{
"key": "03",
"doc_count": 1,
"aggs_avg": {
"value": 50
}
}
]
}
}
}
## 示例3:
POST /test_aggs/infos/_search?pretty
{
"size":0,
"query":{"match_all":{}},
"aggs":{
"aggs_terms":{
"stats":{
"field":"price"
}
}
}
}
#示例4:冗余索引的分组
1、构造更多测试数据
PUT /website/users/3
{
"name": "黄药师",
"email": "huangyaoshi@sina.com",
"birthday": "1970-10-24"
}
PUT /website/blogs/3
{
"title": "我是黄药师",
"content": "我是黄药师啊,各位同学们!!!",
"userInfo": {
"userId": 1,
"userName": "黄药师"
}
}
PUT /website/users/2
{
"name": "花无缺",
"email": "huawuque@sina.com",
"birthday": "1980-02-02"
}
PUT /website/blogs/4
{
"title": "花无缺的身世揭秘",
"content": "大家好,我是花无缺,所以我的身世是。。。",
"userInfo": {
"userId": 2,
"userName": "花无缺"
}
}
2、对每个用户发表的博客进行分组
比如说,小鱼儿发表的那些博客,花无缺发表了哪些博客,黄药师发表了哪些博客
GET /website/blogs/_search
{
"size": 0,
"aggs": {
"group_by_username": {
"terms": {
"field": "userInfo.username.keyword"
},
"aggs": {
"top_blogs": {
"top_hits": {
"_source": {
"include": "title"
},
"size": 5
}
}
}
}
}
}