Elasticsearch——聚合实例

一、Query 类别

术语Query Type用法语法文档
等于Term Query{“query”:{“term”:{“user”:“Kimchy”}}}语法参考
不等于组合使用{“query”:{“bool”:{“must_not”:{“term”:{“user”:“Kimchy”}}}}}
包含Terms Query{“query”:{“terms”:{“user”:[“kimchy”,“elasticsearch”]}}}语法参考
不包含组合使用{“query”:{“bool”:{“must_not”:{“terms”:{“user”:[“kimchy”,“elasticsearch”]}}}}}
有值Exists Query{“query”:{“exists”:{“field”:“user”}}}语法参考
没值组合使用{“query”:{“bool”:{“must_not”:{“exists”:{“field”:“user”}}}}}
区间Range Query{“query”:{“range”:{“age”:{“gte”:10,“lte”:20}}}}语法参考
不等于{“query”:{“range”:{“age”:{“gt”:20,“lt”:20}}}}
大于{“query”:{“range”:{“age”:{“gte”:32}}}}
小于{“query”:{“range”:{“age”:{“lte”:32}}}}
日期区间{“query”:{“range”:{“birthDay”:{“gte”:“1980-01-01”,“lte”:“2009-01-01”,“format”:“yyyy-MM-dd”}}}}

二、聚合Query

术语Query Type用法语法文档
avg求平均Avg Aggregation{“aggs”:{“avg_grade”:{“avg”:{“field”:“grade”}}}}语法参考
去重Cardinality Aggregation{“aggs”:{“user_count”:{“cardinality”:{“field”:“userName”}}}}语法参考

三、index数据说明

字段说明
id用户Id
userName用户名
vipLevel会员级别
phone手机号码
birthDay生日
age年龄
focusNumber关注数
followNumber粉丝数
memberRole会员角色
effectedDate会员有效时间
registerDate注册时间
createTime创建时间
updateTime更新时间
dr删除标记
数据参考
{
	 "id": 19,
	"userName": "user19",
	"vipLevel": 3
	"phone": "13911012364",
	"age": 54,
	"birthDay": -98438400000,
	"focusNumber": 45,
	"followNumber": 56,
	"memberRole": 3,
	"effectedDate": 1583424000000,
	"registerDate": 1521475200000,
	"createTime": 1572969600000,
	"updateTime": 1572969600000,
	"user_event": "user",
	"dr": 0,

}

四、聚合实例
1、按VipLevel分组,获得平均年龄大于20岁,且记录条数大于34条的

{
  "size": 0,
  "aggs": {
    "groupVipLevel": {
      "terms": {
        "field": "vipLevel"
      },
      "aggs": {
        "avgAge": {
          "avg": {
            "field": "age"
          }
        },
        "having": {
          "bucket_selector": {
            "buckets_path": {
              "ageCount": "_count",
              "avgAge": "avgAge"
            },
            "script": {
              "source": "params.avgAge >= 22 && params.ageCount >=34 "
            }
          }
        }
      }
    }
  }
}

2、嵌套 query——未完整

{
	"query": {
		"bool": {
			"must": [{
					"range": {
						"age": {
							"gte": 21,
							"lte": 32,
							"boost": 2.0
						}
					}
				},
				{
					"term": {
						"vipLevel": {
							"value": "1",
							"boost": 1.0
						}
					}
				},
				{
					"nested": {
						"query": {
							"bool": {
								"must": [{
										"range": {
											"age": {
												"gte": 21,
												"lte": 32,
												"boost": 2.0
											}
										}
									},
									{
										"term": {
											"vipLevel": {
												"value": "1",
												"boost": 1.0
											}
										}
									}
								]
							}
						}
					}
				}
			]
		}
	}

}

3、has_child之下组合查询

{
	"size": 2,
	"query": {
		"has_child": {
			"type": "event",
			"query": {
				"bool": {
					"must": [{
							"term": {
								"eventType": "10"
							}
						},
						{
							"range": {
								"startTime": {
									"gt": "2019-11-03 00:00:00",
									"lt": "2029-01-01 00:00:00",
									"format": "yyyy-MM-dd HH:mm:ss"
								}
							}
						}
					]
				}
			}
		}
	}

}

4、多级聚合

{
	"size": 0,
	"aggs": {
		"eventCount": {
			"children": {
				"type": "event"
			},
			"aggs": {
				"osCount": {
					"filter": {
						"range": {
							"startTime": {
								"gte": "2019-11-03 00:00:00",
								"lte": "2029-11-03 00:00:00",
								"format": "yyyy-MM-dd HH:mm:ss"
							}
						}
					},
					"aggs": {
						"eventTypeCount": {
							"terms": {
								"field": "eventType",
								"size": 10
							}
						}
					}
				}
			}
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值