elasticsearch 7.x 索引的查询
es中的查询分为单条件查询和多条件查询,下面详细说明一下
一、 单条件查询
1. 简单查询方法
简单查询方法执行的请求:
GET /索引/文档/_search?q=字段:xxx
例如我这里查询name字段为:“里”,可以看到他支持分词搜索,结果有两个。
这里关注一下“_score”,这个是分数,后面再复杂查询当中还会用到,可以用来排序,数字越大的代表权重越大,会展示在前面。
2. 复杂查询方法
复杂查询方法执行的请求:
GET /索引/文档/_search
{
"query": {
"match": {
"字段": "xxx"
}
}
}
查询结果与简单查询方法一致。但是这种方法还可以进行排序、过滤结果、分页等操作,下面演示一下:
在演示之前这里首先删除之前举例的test3索引,并重新向索引test3中添加两条记录:
PUT /test3/_doc/1
{
"name": "里异火",
"age": 10,
"tags": ["最帅","花里胡哨","秀"]
}
PUT /test3/_doc/2
{
"name": "里乱术",
"age": 11,
"tags": ["帅","颜值高","秀"]
}
2.1 排序
查询并排序请求:
GET /test3/_doc/_search
{
"query": {
"match": {
"name": "里乱术"
}
},
"sort": {
"age": {
"order": "asc"
}
}
}
在"sort"中指定了对"age"的升序排序,可以看到结果也是排序后的结果:
2.2 过滤
过滤是指对字段的过滤,在这两条记录里,每一条记录都会有"name"、“age”、"tags"字段,假如我不想看"tags"呢?
查询并过滤请求:
GET /test3/_doc/_search
{
"query": {
"match": {
"name": "里乱术"
}
},
"_source": ["name","age"]
}
查询后的结果与"_source"中指定的字段是一致的:
2.2 分页
分页操作大家一定不陌生了,在这里给出对应的请求:
GET /索引/文档/_search
{
"query": {
"match": {
"name": "xxx"
}
},
"from": 0, //从第几个数据开始
"size": 2 //返回多少条数据
}
二、 布尔值查询
这里的布尔值查询也叫做多条件查询,方便一次性查询多个条件,一说到多条件查询,肯定能想到与、或、非:
1. must命令
must命令也就相当于sql中的and,同时满足所有条件的记录会被筛选出:
GET /索引/文档/_search
{
"query": {
"bool": {
"must": [ //这里在但条件查询中是match
{
"match": { //其实只是同时写多个match
"字段1": "xxx"
}
},
{
"match": {
"字段2": "xxx"
}
}
]
}
}
}
这里举个例子,同时搜索name字段和age字段,同时满足两个条件的会被筛选出来:
2. should命令
should命令也就相当于sql中的or,满足其中一个条件的记录会被筛选出:
GET /索引/文档/_search
{
"query": {
"bool": {
"should": [ //将must改成should
{
"match": { //两个match满足一个就会被筛选出来
"字段1": "xxx"
}
},
{
"match": {
"字段2": "xxx"
}
}
]
}
}
}
3. not命令
not命令也就相当于sql中的!=,不满足条件的记录会被筛选出:
GET /索引/文档/_search
{
"query": {
"bool": {
"must_not": [ //将must改成must_not
{
"match": {
"字段": "xxx"
}
}
]
}
}
}
4. filter过滤器
filter过滤器相当于">"、"<"、">="、"<=",筛选出满足条件的记录:
GET /索引/文档/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"字段": "xxx"
}
}
],
"filter": {
"range": {
"字段": {
"lt": 10 //小于号
}
}
}
}
}
}
“lt"对应”<"
“gt"对应”>"
“lte"对应”<="
“gte"对应”>="
5. 多项匹配
GET /索引/文档/_search
{
"query": {
"match": {
"字段": "xxx" //查询多个条件可以用空格分开,例如"花里胡哨 帅"
}
}
}
三、 高亮查询
高亮查询应该是最常见的搜索了:
GET /索引/文档/_search
{
"query": {
"match": {
"字段": "xxx"
}
},
"highlight": {
"fields": {
"字段": {}
}
}
}
可以看到例子中查询出来的关键字都被包含在标签中,当然还可以自定义标签样式:
GET /索引/文档/_search
{
"query": {
"match": {
"字段": "xxx"
}
},
"highlight": {
"pre_tags": "样式",
"post_tags": "样式",
"fields": {
"字段": {}
}
}
}
可以看到右边结果中包围关键字的是我们指定的样式。