目录
一、条件查询
1、单条件
1)路由查询
2)body体查询
2、多条件查询
1)and---must
2)or---should
3)范围---filter
3、全文检索、完全匹配、高亮显示
二、聚合查询
1、分组
2、求平均值
一、条件查询
1、单条件
1)路由查询
方法:get
url :http://localhost:9200/wenzhang/_search?q=name:蜡笔
介绍:q后面跟的是字段名,冒号后面是要搜索的关键字
2)body体查询
方法:get
url:http://localhost:9200/wenzhang/_search
{"query":{"match":{"name":"蜡笔"}}}
全量查询:
{"query":{"match_all":{}}}
分页查询:
{"query":
{
"match_all":{
}
},
"from":0,
"size":3
}
from:游标起始位 size:查询量
控制显示字段:
{"query":
{
"match_all":{
}
},
"from":0,
"size":3,
"_source" : ["name"]
}
排序:
{"query":
{
"match_all":{}
},
"from":0,
"size":3,
"sort":{
"age":{
"order" : "desc"
}
}
}
2、多条件查询
方法:get
url:http://localhost:9200/wenzhang/_search
1)and---must
{
"query":{
"bool":{
"must":[
{
"match":{
"name":"蜡笔"
}
},
{
"match":{
"age":6
}
}
]
}
}
}
2)or---should
{
"query":{
"bool":{
"should":[
{
"match":{
"name":"蜡笔"
}
},
{
"match":{
"name":"海绵宝宝"
}
}
]
}
}
}
这样海绵宝宝和蜡笔小新都被查出来了
3)范围---filter
{
"query":{
"bool":{
"must":[
{
"match":{
"name":"蜡笔"
}
}
],
"filter" : {
"range" : {
"age":{
"gt":5
}
}
}
}
}
}
这个时候搜索的就是大于5岁的蜡笔小新,如果把上面的must改成should,那会把8岁的海绵宝宝也搜出来,可见should也作用到了filter上。
3、全文检索、完全匹配、高亮显示
全文检索:match,上面我们查询都是用的这个关键字,但是有个特点,name字段写"蜡笔"和"蜡小笔"都能匹配到数据,原因是es在底层做了拆词,把每个字做了倒排索引,当我们查询的时候会把每个字都拆开全文检索匹配,这样就返回了所有数据。
这不是我们想要的结果,我们就想要蜡笔小新怎么办。有办法,完全匹配。
完全匹配:match_phrase,这样匹配到的都是以我们输入的name里的关键字做的匹配。
高亮显示:highlight,查询过程加入此关键字就可以把匹配到的值高亮显示。
{
"query":{
"bool":{
"must":[
{
"match_phrase":{
"name":"蜡笔"
}
}
]
}
},
"highlight":{
"fields" : {
"name":{}
}
}
}
二、聚合查询
方法:get
url:http://localhost:9200/wenzhang/_search
1、分组
{
"aggs" : {
"age_group" : {
"terms" : {
"field" : "age"
}
}
},
"size" : 0
}
aggs:聚合操作
age_group:自定义聚合名称
terms:聚合的具体操作,terms代表分组
size:查询结果不显示原始数据
2、求平均值
{
"aggs" : {
"age_avg" : {
"avg" : {
"field" : "age"
}
}
},
"size" : 0
}
avg:平均聚合操作