ElasticSearch 高级检索

  接上一章基础检索,在上一章博客中,我在ES中插入了许多的数据,接下来就基于之前的数据进行一些高级的操作
  ES的高级查询有它自己的语言----QueryDSL
  ES提供了一个可以执行查询的JSON风格的DSL,被称为QueryDSL,这个语言很全面,但是稍显复杂,先来体验一哈
在这里插入图片描述
  可以看到,QueryDSL查询是通过get发送请求,并携带一个json数据,这个json数据包含我们的查询条件,其语法格式如下

{
	查询名1:{
		条件1:值1
	},
	查询名2:{
		条件2:值2
	}.....
}
match 分词匹配查询

  match查询会对检索条件进行分词匹配,只要数据匹配其中的一个字符,都会被查询出来,最后根据得分排序返回

# 语法格式
# 查询每个字段值为多少的数据,支持模糊查询
GET bank/_search  # 请求体
{
  "query": {	# 查询
    "match": {	# 匹配查询
      "FIELD": "TEXT"	# 字段:值
    }
  }
}

在这里插入图片描述

match_phrase 短语匹配

  match_phrase 会将检索条件的值作为一个整个进行检索

GET bank/_search
{
  "query": {
    "match_phrase": {
      "FIELD": "PHRASE"
    }
  }
}

在这里插入图片描述

multi_match 多字段匹配

  查询多个字段中包含某个值的数据,并且会对查询条件进行分词匹配

GET bank/_search
{
  "query": {
    "multi_match": {
      "query": "",	# 查询条件
      "fields": []	# 匹配的字段
    }
  }
}

在这里插入图片描述

bool 复合查询

  复合查询可以合并多个查询条件,相当于mysql 中的and条件,查询时需要满足所有的条件

GET bank/_search
{
  "query": {
    "bool": {
      "must": [ # 必须满足这个条件
        {}
      ],
      "must_not": [ # 必须不是这个条件
        {}
      ],
      "should": [ # 可以包含这个条件
        {}
       ]
       .....
  }
}

在这里插入图片描述

term 匹配查询

  term和match一样,都可以做精确匹配,不同的是term不能做模糊查询,term会将检索条件的值作为一个整体去查询,但是ES在存储文本时存在数据分析的问题,相当于是分词存储,所以term在查询多次文本时查不到数据,推荐在查询非文本是使用term

GET bank/_search
{
  "query": {
    "term": {
      "FIELD": {
        "value": "VALUE"
      }
    }
  }
}

在这里插入图片描述

aggregations 聚合

  聚合提供了从数据中分组和提取数据的能力,最简单的聚合方法大致等于sql group by 和sql 聚合函数。

GET bank/_search
{
  "aggs": {
    "NAME": {
      "AGG_TYPE": {}
    }
  }
}

  示例1:搜索address中包含mill的所有人的年龄分布以及平均年龄
在这里插入图片描述
  示例2:按照年龄聚合,并请求这些年龄段的平均薪资
在这里插入图片描述
  示例3:查询所有年龄分布,并且在年龄段中M和F的平均薪资和总体平均薪资
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

華小灼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值