查询
- 一个基础的查询
{
"query":{
"match_all":{} //匹配所有
},
"sort":{
"排序字段名": "desc"/"asc" //降序或生序
},
"from":10,//分页参数
"size":10
}
- 字段匹配
match匹配非字符串,就是精确查询,否则就是全文检索(倒排索引),
对内容进行分词,每个包含单词的都会被匹配
每个匹配文档,都有自己的得分,并且按照得分从高到低排序
"query":{
"match":{
"字段名":"内容"
}
}
- 精确匹配
字段名.keyword即可
- 短语匹配
不分词,内容当做不可分割的参数去查询,所有包含完整的内容的文档都会被匹配(%xxx%)
"query":{
"match_phrase":{
"字段名":"内容"
}
}
- 多字段匹配
相当于s <字段1 匹配 "内容" or 字段2 匹配 "内容">,会进行分词检索
"query":{
"multi_match":{
"query":"一个内容",
"fields":["字段1","字段2"]
}
}
- bool查询,相当于sql 里边的 and or 这些的
"query":{
"bool":{
"must":[ //必须匹配
{"match":{
"字段名":"内容" ,
}},
...
],
"must_not":[ //必须不匹配
{"match":{
"字段名":"内容" ,
}},
]
}
}
must = 必须
must_not = 必须不包括
should = 应该满足,不满足也关系,满足了得分高..
filter = 不贡献得分的过滤
如果must、should被匹配,都会获得一些得分,而过滤器,不会贡献得分
- term
找精确值用term,文本查找不要用term
"query":{
"term":{
"字段名":"内容"
}
}
聚合
相当于 group by
"aggs":{
"<聚合的名字>":{
"<聚合类型>":{
<具体参数>
}
}
...
}
聚合类型
term = count(xxx)
avg = avg(xxx)
父聚合可以嵌套子聚合
"aggs":{
"<聚合的名字>":{
"<聚合类型>":{
<具体参数>
},
"aggs":{
"<聚合的名字>":{
"<聚合类型>":{
<具体参数>
}
}
}
}
...
}
其他
- 返回自定义字段
"_source":["字段A","字段B"]