ES SearchAPI----Query DSL语言

文章目录

  • Getting Started
    • match_all查询全部
    • sort排序
    • from\size分页
    • _source指定字段
  • match匹配查询
  • match_phrase短语匹配
  • multi_match多字段匹配
  • range范围查询
  • bool复合查询
    • must必须匹配,可贡献得分
    • must_not必须不匹配,可贡献得分
    • should可有可无,可贡献得分,不影响记录数
    • filter条件再过滤,不贡献得分
  • term和match
  • match_phrase 和 .keyword

Query DSL:Elasticsearch 提供了一个可以执行查询的JSON 风格的 DSL (domain-specific language 领域特定语言)。这个被称为 Query DSL

ES 支持两种基本方式检索,通俗的讲第二种检索方式的请求体就是DSL语言

  • 一个是通过使用 REST request URI 发送检索参数(ur+检索参数)
  • 另一个是通过使用 REST request body 来发送它们(uri+请求体)

接下来的实验操作都是基于测试数据(account.json)进行的。

Getting Started

match_all查询全部

GET /bank/_search
{
  "query":{
    "match_all": {}
  }
}

sort排序

query:指定查询的条件
sort:进行排序

GET /bank/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "FIELD": {
        "order": "desc"
      }
    }
  ]
}

在这里插入图片描述

from\size分页

默认每次查询10条数据,可以使用fromsize指定每页的记录数,下面的DSL表示每页查询5条数据,这是第一页
from=(pageNum-1) * pageSize

GET /bank/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "balance": {
        "order": "asc"
      }
    }
  ],
  "from": 0,
  "size": 5
}

_source指定字段

"_source"可以指定结果集中只显示哪些字段

GET /bank/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "balance": {
        "order": "asc"
      }
    }
  ],
  "_source": ["firstname","lastname","gender"], 
  "from": 5,
  "size": 5
}

在这里插入图片描述

match匹配查询

基本语法如下所示:

GET /bank/_search
{
  "query": {
    "match": {
      "FIELD": "TEXT"
    }
  }
}
  1. 如果match匹配非字符串字段,那么就是精确查询
  2. 如果match匹配字符串字段,那么就是模糊查询,也叫全文检索
# 匹配非字符串字段,就是精确查询
GET /bank/_search
{
  "query": {
    "match": {
      "account_number": 20
    }
  }
}
# 匹配字符串字段,就是模糊查询
# 查询出19条数据,它是分词查询,这些记录按照各自的评分进行排序
GET /bank/_search
{
  "query": {
    "match": {
      "address": "mill lane"
    }
  }
}

match_phrase短语匹配

前面使用match匹配查询"address": "mill lane"它是进行的分词查询,如下图
在这里插入图片描述
但有时候就需要将mill lane作为一个整体(短语)进行匹配,这个时候就可以使用match_phrase进行匹配,它会将mill lane作为整体,只要Value中包含mill lane就会被匹配成功

GET /bank/_search
{
  "query": {
    "match_phrase": {
      "address": "mill lane"
    }
  }
}

在这里插入图片描述

multi_match多字段匹配

比如期望查询出address或state这两个字段中都包含mill,就好比SQL的如下语句

select * from table_name where address like `%mill%` or state like `%mill%`

基本语法格式如下所示;其中query用来指定匹配的值,fields用来指定将从哪些字段中去匹配该值

GET /bank/_search
{
  "query": {
    "multi_match": {
      "query": "",
      "fields": []
    }
  }
}

在这里插入图片描述
多字段匹配的时候会不会进行分词查询呢?
在这里插入图片描述

range范围查询

基本格式

GET bank/_search
{
  "query": {"range": {
    "FIELD": {
      "gte": 10,
      "lte": 20
    }
  }}
}

bool复合查询

bool用来做复合查询;复合语句可以合并任何其他查询语句,包括复合语句,了解这一点很重要的,这就意味着,复合语句之间可以相互嵌套,可以表达非常复杂的逻辑

must必须匹配,可贡献得分

must:必须达到must列举的所有条件,并将有助于得分

期望查询出gender=’M‘并且address中包含’mill‘的记录

# select * from table_name where gender='M' and address like '%mill%'
GET bank/_search
{
  "query": {
    "bool": {
      "must": [
        {"match": {"gender": "M"}},
        {"match": {"address": "mill"}}
      ]
    }
  },
  "_source": ["gender","address"]
}

在这里插入图片描述

must_not必须不匹配,可贡献得分

记录一下格式,注意层级格式

# gender=M’ and address like '%mill%' and age <> 28
GET bank/_search
{
  "query": {
    "bool": {
      "must": [
        {"match": {"gender": "M"}},
        {"match": {"address": "mill"}}
      ],
      "must_not": [
        {"match": {"age": 28}}
      ]
    }
  },
  "_source": ["gender","address","age"]
}

在这里插入图片描述

should可有可无,可贡献得分,不影响记录数

should:表示可有可无,如果匹配上就会提高该记录的得分,如果没有匹配上也不会影响查询结果集的数量

在这里插入图片描述

filter条件再过滤,不贡献得分

前面的must、must_not筛选出满足条件的记录,并贡献得分;should不会对满足must、must_not的记录数产生任何影响,但是它会对匹配should条件的记录贡献得分;而filter却不会贡献得分,只会在must、must_not的基础上对结果进行再过滤。

如下;在满足must的基础上,再筛选出age大于10并且小于30的记录
GET bank/_search
{
  "query": {
    "bool": {
      "must": [
        {"match": {"gender": "M"}},
        {"match": {"address": "mill"}}
      ],
      "filter": [
        {"range": {
          "age": {
            "gte": 10,
            "lte": 30
          }
        }}
      ]
    }
  },
  "_source": ["age","lastname","address"]
}

在这里插入图片描述

term和match

term 和 match 一样。匹配某个属性的值。只是全文检素(text)字段用 match,其他非text 字段匹配用 term。
在这里插入图片描述

match_phrase 和 .keyword

  • match_phrase:只要包含该短语就会被匹配上
  • ***.keyword: 必须是精确匹配

下图使用address字段进行了验证
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/105222.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

GoLong的学习之路(八)语法之Map

文章目录 Map初始化方式判断某个键是否存在map的遍历对value值遍历。对key值遍历 使用delete()函数删除键值对按照指定顺序遍历map元素为map的切片值为切片类型的map 做个题吧 Map 哈希表是一种巧妙并且实用的数据结构。它是一个无序的key/value对的集合&#xff0c;其中所有的…

MFI芯片I2C地址转换(写读转7位传入API接口)

是否需要申请加入数字音频系统研究开发交流答疑群(课题组)&#xff1f;可加我微信hezkz17, 本群提供音频技术答疑服务 MFI芯片I2C地址转换(写读转7位传入API接口&#xff09; #define MFI_I2C_CHIP_ADDR 0x10// 芯片写/读 0x20/0x21(写/读) 七位地址 0x10 //zk 使用读地址…

ubuntu18.4(后改为20.4)部署chatglm2并进行基于 P-Tuning v2 的微调

下载驱动 NVIDIA显卡驱动官方下载地址 下载好对应驱动并放在某个目录下&#xff0c; 在Linux系统中安装NVIDIA显卡驱动前,建议先卸载Linux系统自带的显卡驱动nouveau。 禁用nouveau 首先&#xff0c;编辑黑名单配置。 vim /etc/modprobe.d/blacklist.conf 在文件的最后添加…

Windows客户端下pycharm配置跳板机连接内网服务器

问题&#xff1a;实验室服务器仅限内网访问&#xff0c;无法在宿舍&#xff08;外网&#xff09;访问实验室的所有内部服务器&#xff0c;但同时实验室又提供了一个外网可以访问的跳板机&#xff0c;虽然可以先ssh到跳板机再从跳板机ssh到内网服务器&#xff0c;但这种方式不方…

Unity DOTS系列之Filter Baking Output与Prefab In Baking核心分析

最近DOTS发布了正式的版本, 我们来分享一下DOTS里面Baking核心机制&#xff0c;方便大家上手学习掌握Unity DOTS开发。今天给大家分享的Baking机制中的Filter Baking Output与Prefab In Baking。 对啦&#xff01;这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础…

Linux区分文件类型,file指令,目录权限,umask掩码,共享文件,Linux中的一些有趣指令

file指令&#xff0c;Linux区分文件类型&#xff0c;目录权限&#xff0c;umask掩码&#xff0c;共享文件&#xff0c;Linux中的一些有趣指令 1.Linux中是如何区分文件类型的2. file指令3.目录权限4.umask掩码5.粘滞位6.Linux中的一些有趣指令 所属专栏&#xff1a;Linux学习❤…

海外广告投放保姆级教程,如何使用Quora广告开拓新流量市场?

虽然在Quora 上学习广告相对容易&#xff0c;但需要大量的试验和错误才能找出最有效的方法。一些广告技巧可以让您的工作更有效率。这篇文章将介绍如何有效进行quora广告投放与有价值的 Quora 广告要点&#xff0c;这将为您节省数万美元的广告支出和工作时间&#xff01;往下看…

中国技术的对外输出:Telegram也开始搞小程序应用了

Telegram 宣布为其开发者提供了一项“能够在其中运行迷你应用”的新功能&#xff08; 迷你应用即 Mini App&#xff0c;下文中以“小程序”代替&#xff09;。 在 Telegram 的博客中&#xff0c;开发人员介绍可以使用 JavaScript 构建自己的迷你应用 在一篇博客文章中&#xf…

原型制作的软件 Experience Design mac( XD ) 中文版软件特色

​XD是一个直观、功能强大的UI/UX开发工具&#xff0c;旨在设计、原型、用户之间共享材料以及通过数字技术进行设计交互。Adobe XD提供了开发网站、应用程序、语音界面、游戏界面、电子邮件模板等所需的一切。xd mac软件特色 体验设计的未来。 使用 Adobe XD 中快速直观、即取即…

Office技巧(持续更新)(Word、Excel、PPT、PowerPoint、连续引用、标题、模板、论文)

1. Word 1.1 标题设置为多级列表 选住一级标题&#xff0c;之后进行“定义新的多级列表” 1.2 图片和表的题注自动排序 正常插入题注后就可以了。如果一级标题是 “汉字序号”&#xff0c;那么需要对题注进行修改&#xff1a; 从原来的 图 { STYLEREF 1 \s }-{ SEQ 图 \* A…

Unity读取写入Excel

1.在Plugins中放入dll&#xff0c;118开头的dll在Unity安装目录下&#xff08;C:\Program Files\Unity\Editor\Data\Mono\lib\mono\unity&#xff09; 2.写Excel public void WriteExcel(){//文件地址FileInfo newFile new FileInfo(Application.dataPath "/test.xlsx…

【前段基础入门之】=>CSS3新增渐变颜色属性

导语&#xff1a; CSS3 新增了&#xff0c;渐变色 的解决方案&#xff0c;这使得我们可以绘制出更加生动的炫酷的的配色效果 线性渐变 多个颜色之间的渐变&#xff0c; 默认从上到下渐变 background-image: linear-gradient(red,yellow,green); /*默认从上到下渐变*/默认从上…

uniapp实现webview页面关闭功能

实现思路&#xff1a; 1.关闭按钮是使用原生button添加的close属性。&#xff08;见page.json页面&#xff09; 2.监听关闭按钮的方法。&#xff08;onNavigationBarButtonTap&#xff09; 3.写实现关闭webview所有页面的逻辑。 废话不多说&#xff0c;直接上代码 1.page.…

SpringBoot集成Redis主从架构实现读写分离(哨兵模式)

一、前言 这里会使用到spring-boot-starter-data-redis包&#xff0c;spring boot 2的spring-boot-starter-data-redis中&#xff0c;默认使用的是lettuce作为redis客户端&#xff0c;也推荐使用lettuce&#xff0c;Redis使用哨兵集群&#xff0c;这里会通过lettuce连接到哨兵…

C++之Linux syscall实例总结(二百四十六)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

2023年清洁电器行业数据分析:洗地机市场规模持续倍增,进入赛点

洗地机作为清洁电器领域的明星品类&#xff0c;正在成为继扫地机器人之后拉动清洁电器市场大盘的又一核心动力。 在清洁电器领域&#xff0c;扫地机器人、洗地机和吸尘器是三大热门品类。截至今年9月份&#xff0c;根据鲸参谋平台的数据显示&#xff0c;吸尘器的规模继续大幅下…

2023年香水行业数据分析:国人用香需求升级,高端香水高速增长

在人口结构变迁的背景下&#xff0c;“Z世代”作为当下我国的消费主力&#xff0c;正在将“悦己”消费推动成为新潮流。具备经济基础的“Z世代”倡导“高颜值”、“个性化”、“精致主义”&#xff0c;这和香水、香氛为代表的“嗅觉经济”的特性充分契合&#xff0c;因此&#…

初始Redis 分布式结构的发展演变

目录 Redis的特点和使用场景 分布式系统的引入 单机系统 分布式系统 应用服务器的增多&#xff08;处理更多的请求&#xff09; 数据库读写分离&#xff08;数据服务器的增多) 引入缓存 应对更大的数据量 业务拆分&#xff1a;微服务 Redis的特点和使用场景 我们先来…

vue重修之Vuex【下部】

文章目录 版权声明Vuex的模块化获取Vuex模块内state数据获取Vuex模块内getters数据获取Vuex模块内mutations方法获取模块内的actions方法总结 版权声明 本博客的内容基于我个人学习黑马程序员课程的学习笔记整理而成。我特此声明&#xff0c;所有版权属于黑马程序员或相关权利…

浮动面试题

浮动元素特点&#xff1a;