一、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
}
}
}
}
}
}
}
}