新建一个索引
PUT /approval_list_zhc
插入数据
{
"name":"xilianpeng",
"age":27,
"email":"xilianpeng@hrfax.cn",
"sex":"0",
"salary":35000
}
查询全部
{"query":{"match_all":{}}}
查询全部,并按salsry倒序排序
{
"query": {
"match_all": {
}
},
"sort":{
"salary":"desc"
}
}
查询全部,并按salary倒序,如果salary相同,按age升序排序
{
"query": {
"match_all": {
}
},
"sort": [{
"salary": "desc"
}, {
"age": "asc"
}]
}
查询第一第二条数据,按salary降序,age升序
{
"query": {
"match_all": {
}
},
"sort": [{
"salary": "desc"
}, {
"age": "asc"
}],
"from": 0,
"size": 2
}
_source指定返回哪几个字段
{
"query": {
"match_all": {
}
},
"sort": [{
"salary": "asc"
}, {
"age": "asc"
}],
"from": 1,
"size": 2,
"_source": ["name", "age"]
}
match 指定哪个属性匹配哪个值,如检索age是20的信息
{
"query": {
"match": {
"age": 20
}
}
}
match 匹配字符串字段就是模糊搜索(维护了一个倒排索引)
比如说“wangcai erha”,能匹配出email值为"wangcai erha gouzi"和"wangcai erha " match 匹配非字符串的就是精确搜索
{
"query": {
"match": {
"email": "wangcai erha"
}
}
}
match_phrase 短语匹配
如果匹配"wangcai erha gouzi",那么email字段下必须是有"wangcai erha gouzi"这完整的短语,如果是match的话,只要包含一个就能匹配出来,比如包含了"wangcai erha"的email字段也能匹配出来
{
"query": {
"match_phrase": {
"email": "wangcai erha gouzi"
}
}
}
用match_phrase只能检索出一个 
用match能检索出2个结果 
multi_match 多字段匹配
查询只要email字段里包含erha或gouzi的数据
{
"query": {
"multi_match": {
"query": "erha gouzi",
"fields": "email"
}
}
}
bool查询
可以合并多个查询条件。以下条件是 必须sex字段为1,并且必须email字段包含erha, must为必须
{
"query": {
"bool": {
"must": [{
"match": {
"sex": 1
}
},
{
"match": {
"email": "erha"
}
}
]
}
}
}
must_not 必须不满足,以下是多条件复合查询。
{
"query": {
"bool": {
"must": [{
"match": {
"sex": 1
}
},
{
"match": {
"email": "erha"
}
}
],
"must_not": [{
"match": {
"name": "wangcai"
}
}]
}
}
}
should 满足should的条件最好,得分最高,不满足也没关系
{
"query": {
"bool": {
"must": [{
"match": {
"sex": 1
}
},
{
"match": {
"email": "erha"
}
}
],
"should": [{
"match": {
"name": "wangcai"
}
}]
}
}
}
filter 过滤,会把不满足这个条件的过滤掉
{
"query": {
"bool": {
"must": [{
"match": {
"sex": 1
}
}],
"filter": {
"range": {
"salary": {
"gte": 20000,
"lte": 30000
}
}
}
}
}
}
term 找精确字典的,非文本字典用term查询。
由于ES在保存text字段的时候,存在分词的问题。用term检索整个完整的值是非常困难的
{
"query": {
"term": {
"salary": 20000
}
}
}
字段.keyword 相当于精确匹配
{
"query": {
"match": {
"email.keyword": "wangcai erha"
}
}
}
aggregations 聚合
要做一个聚合
为这个聚合起一个名字
做什么类型的聚合
聚合体的内容
聚合里的元数据
基于上一次的聚合再进行聚合,子聚合

{
"query": {
"match_all": {}
},
"aggs": {
"ageAgg": {
"terms": {
"field": "age",
"size": 10
}
}
}
}
按照年龄所有可能的值来聚合 
可以多个聚合,年龄所有可能的值来聚合,平均工资聚合
{
"query": {
"match_all": {}
},
"aggs": {
"ageAgg": {
"terms": {
"field": "age",
"size": 10
}
},
"salayAvg": {
"avg": {
"field": "salary"
}
}
}
}

聚合里面再套聚合,这个年龄段下面的人的平均工资
{
"query": {
"match_all": {}
},
"aggs": {
"ageAgg": {
"terms": {
"field": "age",
"size": 10
},
"aggs": {
"ageAvg": {
"avg": {
"field": "salary"
}
}
}
}
}
}
结果:

|