zl程序教程

您现在的位置是:首页 >  其他

当前栏目

ElasticSearch 花式搜索详解(第七更)

搜索elasticsearch 详解 第七 花式
2023-09-11 14:21:23 时间

ES复杂查询

先了解搜索后的结构体!

在这里插入图片描述
注意 在kibana中每个key 在后面结合springboot后都是对应的对象!

筛选字段 source

  "_source": ["field","field",...]

在这里插入图片描述
如果设置source就像mysql中指定字段名一样!

排序 sort

"sort": [
    {
      "age": {  #这是个集合,代表可以有多个值进行排序
        "order": "desc" #asc或desc
      }
    }
  ]

在这里插入图片描述

分页 form,size

  "from": 0, #从第几个数据开始
  "size": 1  #显示多少条

在这里插入图片描述

多条件匹配查询 must 相当于mysql中的关键词and

使用must可以将条件进行and匹配

GET /my_index6/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "name": "张"
          }
        },
        {
          "match": {
            "age": 23
          }
        }
      ]
    
    }
  }
}

在这里插入图片描述

可以把match换成term 单词进行精确匹配

多条件匹配 should 相当于 mysql中的关键词or

使用should 可以将条件进行or匹配

GET /my_index6/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "name": "张二狗"
          }
        },
        {
          "match": {
            "age": 23
          }
        }
      ]
    }
  }
}

在这里插入图片描述

多条件查询 must_not 不等于 则匹配

多条件 and关系

GET /my_index6/_search
{
  "query": {
    "bool": {
      "must_not": [
        {
          "match": {
            "age": 23
          }
        }
      ]
    }
  },
  "_source": ["age"]
}

在这里插入图片描述

复杂查询 fitle 过滤

  • gt #大于 >
  • gte #大于等于 >=
  • lt #小于 <
  • lte #小于等于 <=

查询年龄在22到24之间的数据

      "filter": [
        {
          "range": {
            "age": {
              "gte": 22,
              "lte": 24
            }
          }
        }
      ]

在这里插入图片描述

复杂查询 一个字段多条件匹配 or

只需要空格隔开就行

在这里插入图片描述

text和keyword、match和term区别

  • text 会被分词器解析
  • keyword 不会被分词器解析
  • match 会模糊匹配
  • term 会精确匹配(词),且会使用倒排索引,效率相对来说要高很多
  • term+keyword 最精确查询

高亮查询

  "highlight": {
    "fields": {
      "name": {}
    }
  }

在这里插入图片描述
默认高亮是em标签,我们还可以自定义标签和样式

在这里插入图片描述

总结!

  • 匹配
  • 按条件匹配
  • 精确匹配
  • 排序
  • 区间范围匹配
  • 区间过滤匹配
  • 分页
  • 单个字段 多条件匹配
  • 高亮查询 自定义标签