es 7.x 通过DSL的常用查询语句

一 模拟造数

1.1 模拟数据

添加数据修改数据的请求方式为post

http://localhost:9200/student/_doc/101
{
"name":"zhangsan",
"nickname":"zhangsan",
 "sex":"男",
 "age":30,
 "createTime":"2022-10-22 23:10:12"

}


http://localhost:9200/student/_doc/102
{
"name":"lisi",
"nickname":"lisi",
 "sex":"男",
 "age":20,
 "createTime":"2023-02-01 12:03:04"
}
http://localhost:9200/student/_doc/103
{
"name":"wangwu",
 "nickname":"wangwu",
 "sex":"女",
 "age":40,
 "createTime":"2023-03-05 12:45:23"
}
http://localhost:9200/student/_doc/104

{
"name":"zhangsan1",
"nickname":"zhangsan1",
 "sex":"女",
 "age":50,
 "createTime":"2023-04-09 12:45:12"
}
http://localhost:9200/student/_doc/105
{
"name":"zhangsan2",
"nickname":"zhangsan2",
 "sex":"女",
 "age":30,
 "createTime":"2022-05-01 10:08:02"
}

1.2  修改数据覆盖旧数据*

1.通过id修改数据: 修改前

 2.修改中:

3.修改后

二 常用操作

2.1  查询全部数据 

{ 
"query": { 
"match_all": {} 
} 
} 

2.2 匹配查询数据(match)

match 匹配类型查询,会把查询条件进行分词,然后进行查询,多个词条之间是 or 的关系

{
 "query": {
 "match": {
 "name":"zhangsan"
 }
 }
}

2.3 字段匹配

{"query": { 
"multi_match": { 
"query": "zhangsan", 
"fields": ["name","nickname"] 
} 
} 
}

2.4 精确查询(term)

term 查询,精确的关键词匹配查询,不对查询条件进行分词。

{
 "query": {
 "term": {
 "name": {
 "value": "wangwu"
 }
 }
 }
}

2.5 精确查询(多-term) 

term 查询,精确的关键词匹配查询,不对查询条件进行分词。

{
 "query": {
 "terms": {
 "name": ["zhangsan","lisi"]
 }
 }
}

2.6 返回指定的字段

includes:来指定想要显示的字段

excludes:来指定不想要显示的字段

{
 "_source": {
 "includes": ["name","age"]
 }, 
 "query": {
 "terms": {
 "nickname": ["zhangsan"]
 }
 }
}

2.7 返回指定的字段

`bool`把各种其它查询通过`must`(必须 )、`must_not`(必须不)、`should`(应该)的方

式进行组合

http://localhost:9200/student/_search

 {"query": {
 "bool": {
 "must": [
 {
 "match": {
 "name": "zhangsan"
 }
 }
 ],
 "must_not": [
 {
 "match": {
 "age": "40"
 }
 }
 ]
 }
 }
}

2.8 组合查询

查询语句: 

{
 "query": {
 "range": {
 "age": {
 "gte": 30,
 "lte": 35
 }
 }
 }
}

2.9  fuzzy组合查询

为了找到相似的术语,fuzzy 查询会在指定的编辑距离内创建一组搜索词的所有可能的变体

或扩展。然后查询返回每个扩展的完全匹配。

通过 fuzziness 修改编辑距离。一般使用默认值 AUTO,根据术语的长度生成编辑距离

{
 "query": {
 "fuzzy": {
 "name": {
 "value": "zhangsan"
 }
 }
 }
}

 2.10  sort排序

sort 可以让我们按照不同的字段进行排序,并且通过 order 指定排序的方式。desc 降序,asc 升序。

"query": { 
"match": { 
"name":"zhangsan" 
} 
}, 
"sort": [{ 
"age": { 
"order":"desc" 
} 
}] 
}

2.11 多字段排序

使用 age _score 进行查询,并且匹配的结果首先按照年龄排序,然后 按照相关性得分排序

{
 "query": {
 "match_all": {}
 },
 "sort": [
 {
 "age": {
 "order": "desc"
 }
 },
 {
 "_score":{
 "order": "desc"
 }
 }
 ]
}

 2.12 高亮显示

Elasticsearch 可以对查询内容中的关键字部分,进行标签和样式(高亮)的设置。

在使用 match 查询的同时,加上一个 highlight 属性:

pre_tags:前置标签

post_tags:后置标签

fields:需要高亮的字段

title:这里声明 title 字段需要高亮,后面可以为这个字段设置特有配置,也可以空

{
 "query": {
 "match": {
 "name": "zhangsan"
 }
 },
 "highlight": {
 "pre_tags": "<font color='red'>",
 "post_tags": "</font>",
 "fields": {
 "name": {}
 }
 }
}

2.13 分页

from:当前页的起始索引,默认从 0 开始。 from = (pageNum - 1) * size

size:每页显示多少条

{
 "query": {
 "match_all": {}
 },
 "sort": [
 {
 "age": {
 "order": "desc"
 }
 }
 ],
 "from": 0,
 "size": 2
}

2.14 聚合查询

聚合允许使用者对 es 文档进行统计分析,类似与关系型数据库中的 group by,当然还有很多其他的聚合,例如取最大值、平均值等等。

{
 "aggs":{
 "max_age":{
 "max":{"field":"age"}
 }
 },
 "size":0
}

2.15 去重查询

{
 "aggs":{
 "distinct_age":{
 "cardinality":{"field":"age"}
 }
 },
 "size":0
}

2.16 state求出全部聚合参数

 stats 聚合,对某个字段一次性返回 count,max,min,avg 和 sum 五个指标

{
 "aggs":{
 "stats_age":{
 "stats":{"field":"age"}
 }
 },
 "size":0
}

2.17 桶聚合

桶聚和相当于 sql 中的 group by 语句。

{
 "aggs":{
 "age_groupby":{
 "terms":{"field":"age"},
  "aggs":{
   "sum_age":{
       "sum":{"field":"age"}
   }

  }
 }
 },
 "size":0
}

 2.18 分组统计

桶聚和相当于 sql 中的 group by 语句。

{
 "aggs":{
 "age_groupby":{
 "terms":{"field":"age"}
 }
 },
 "size":0
}

 2.19 时间范围查询

 1.定义mapping结构

"createTime":{
"type": "date",
"format":"yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis",
"index": true
}

 2.查询语句

{
 "query": {
 "range": {
 "createTime": {
 "gte": "2023-01-01 00:00:00",
 "lte": "2023-04-30 23:59:59",
 "format":"yyyy-MM-dd HH:mm:ss",
 "include_lower":true,
 "include_upper":true
 }
 }
 }
}

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值