ES的进阶查询
大家好我是迷途,一个在互联网行业,摸爬滚打的学子。热爱学习,热爱代码,热爱技术。热爱互联网的一切。再也不怕elasticsearch系列,帅途会慢慢由浅入深,为大家剖析一遍,各位大佬请放心,虽然这个系列帅途有时候更新的有点慢,但是绝对不会烂尾!如果你喜欢本系列的话,就快点赞关注收藏安排一波吧~
本文主要讲解一些ES一些进阶的查询,分页、排序、多条件组合筛选等。
- 参数列表
1、简单查询
- 查询当前索引下全部文档
GET /{索引}/_search
{
"query": { "match_all": {} }, -- 匹配全部
"sort": [
{ "age": "asc" } -- 根据age字段排序
]
}
这里在ES的官方文档中描述使用GET请求,经过博主测试使用POST也是可以的。
返回值解析
- took :运行时间
- timed_out :请求是否超时
- _shards :搜索成功多少分片,失败或跳过多少分片
- max_score :最匹配文档分数
- hits.total.value :匹配文档数量
- hits.sort :文档位置
- hits._score :文档的相关性得分(使用时不适用match_all)
2、 分页查询
GET /{索引}/_search
{
"query": { "match_all": {} },
"sort": [
{ "age": "asc" }
],
"from": 1, -- 当前页
"size": 10 -- 每页展示数
}
根据年龄排序分页查询前10条数据(由于博主只添加了7条所以这里展示了7条数据)
3、 精确匹配
GET /{索引}/_search
{
"query": { "term": { "name": "wanger" } }
}
注意:在未添加中文分词器的情况下,如果查询字段不加keyword,直接查询中文会查询不到数据。term查询不区分大小写
查询姓名为王二的用户
4、 分词匹配查询
GET /{索引}/_search
{
"query": { "match": { "name": "王二" } }
}
查询姓名包含王二关键字的数据,es会对我们的关键字进行分词,然后查询有一定程度匹配的数据,如果没有设置排序,则默认根据匹配程度排序
5、 包含查询
GET /{索引}/_search
{
"query": { "match_phrase": { "name": "王二" } }
}
查询包含王二的数据
6、 组合查询
GET /{索引}/_search
{
"query": {
"bool": {
"must": [
{ "match": { "name": "王二" } }
],
"must_not": [
{ "match": { "age": "18" } }
]
}
}
}
查询姓名包含关键字王二的数据并排除掉年龄为18的匹配数据
参数解析
bool:Boolean过滤器,多条件组合参数时查询
must:必须匹配,类似于sql中的AND
must_not:必须不匹配,与sql中NOT类似
should :或者匹配,与sql中OR类似
注意:在bool过滤器中should与must共同使用时should(or)会失效
参考文档:ES官方文档
本文讲解了一部分ES常用的查询,将在下一盘文章中详细解析ES中的聚合查询,持续更新中ing…
如果本文有帮助到你的话,请点赞关注一下吧你的点赞关注就是对博主最大的支持