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字段进行了验证
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AnkiPDF Guru软件评测:打开全新学习方式的大门

在当今信息爆炸的时代&#xff0c;如何高效学习和记忆成为了每个人关注的焦点。AnkiPDF Guru软件作为结合了Anki和PDF的学习利器&#xff0c;向我们展示了一种全新的学习方式。本文将以软件的实用性和使用场景为切入点&#xff0c;从专业的角度客观分析和评测该软件&#xff0c…

VB.NET 中使用SqlConnection类连接到Microsoft SQL Server数据库的详细步骤

目录 前言: 过程: 1.建立SqlConnection连接 2.打开SqlConnection连接 3.关闭SqlConnection连接 4.执行SqlCommand命令 5.传递参数 总结: 前言: VB.NET的SqlConnection是一个用于连接到SQL Server数据库的类。在VB.NET中&#xff0c;SqlConnection是一个很重要的类&…

听GPT 讲Rust源代码--library/std(1)

std git:(master) ✗ tree.├── Cargo.toml├── benches│ ├── hash│ │ ├── map.rs│ │ ├── mod.rs│ │ └── set_ops.rs│ └── lib.rs├── build.rs├── src│ ├── alloc.rs│ ├── ascii.rs│ ├── backtrace│ │…

Mysql主从集群同步延迟问题怎么解决

主从复制 复制过程分为几个步骤&#xff1a; 主库的更新事件(update、insert、delete)被写到binlog 从库发起连接&#xff0c;连接到主库。 此时主库创建一个 binlog dump thread&#xff0c;把 binlog 的内容发送到从库。 从库启动之后&#xff0c;创建一个 I/O 线程&#xff…

TensorFlow和Pytorch两种机器学习框架的比较及优缺点

TensorFlow是一个开源的机器学习框架&#xff0c;由Google开发并发布&#xff0c;它被用来构建各种类型的机器学习模型&#xff0c;例如图像识别、语音识别、自然语言处理等。TensorFlow主要有以下几个基本概念&#xff1a; Tensor&#xff1a;TensorFlow中最基本的数据结构&am…

Pillow库(PIL)入门教程

Pillow库&#xff0c;PIL的升级版&#xff0c;一个免费开源的Python图像处理库。 Pillow 库&#xff08;有时也称 PIL 库&#xff09; 是 Python 图像处理的基础库&#xff0c;它是一个免费开源的第三方库&#xff0c;由一群 Python 社区志愿者使用 Python 语言开发而成&#…

创建Secret(手动)

和创建其他类型的 API 对象&#xff08;Pod、Deployment、StatefulSet、ConfigMap 等&#xff09;一样&#xff0c;您也可以先在 yaml 文件中定义好 Secret&#xff0c;然后通过 kubectl apply -f 命令创建。此时&#xff0c;您可以通过如下两种方式在 yaml 文件中定义 Secret&…

数字化营销如何推动企业营收增长?数字化营销要点有哪些?

在数字化席卷而来的时代&#xff0c;企业若想在激烈的市场竞争中脱颖而出&#xff0c;就得紧跟潮流&#xff0c;运用数字化营销手段更快、更准地触达目标客户&#xff0c;从而帮助企业更好地解读客户需求&#xff0c;捕捉痛点&#xff0c;实现精细化营销闭环。 数字化营销如何让…

经典卷积神经网络 - GoogLeNet

GoogLeNet是google推出的基于Inception模块的深度神经网络模型&#xff0c;在2014年的ImageNet竞赛中夺得了冠军&#xff0c;在随后的两年中一直在改进&#xff0c;形成了Inception V2、Inception V3、Inception V4等版本。 Inception块 4个路径从不同层面抽取信息&#xff0…

java版opencv之Javacv各种场景使用案例

文章目录 1.关于Javacv~~2. [官网下载最新OpenCV4.8](https://opencv.org/releases/)&#xff0c;并解压~~ *不一定要安装opencv*~~3. 将opencv的jar包及动态库dll文件引入项目~~4.pom引入javacv库5.测试5.1 图片美颜5.2 图片人脸检测5.3 提取视频中的语音5.4 音视频剪辑5.5 录…

python关于当前时间戳的获取及时间运算

日期和时间在计算机编程中是非常重要的概念&#xff0c;特别是在处理数据、日志记录、计划任务等方面。Python作为一门功能强大的编程语言&#xff0c;提供了丰富的库和内置函数&#xff0c;使得对日期和时间的操作变得简单而高效。本文将介绍一些常见的Python日期时间操作&…

shell脚本实战案例--系统服务脚本

目录 1、源码编译安装nginx 2、分别编写基于RHEL6和RHEL7的脚本。 2.1 RHEL6的nginx系统服务脚本 2.2 RHEL7的nginx系统服务脚本 1、源码编译安装nginx 1.首先关闭防火墙和selinux [rootnode13 ~]# systemctl stop firewalld [rootnode13 ~]# setenforce 0 2.准备环境&…

阿里云核心产品list

计算&#xff1a; 01函数计算&#xff08;Function Compute&#xff09;全托管serverless计算服务&#xff0c;不需要管理服务器等基础设施&#xff0c;只需要编写代码并上传。 02云服务器&#xff08;Elastic Compute Service&#xff09;云计算服务 03GPU云服务&#xff08;G…

java类的动态加载

java类的动态加载 java动态加载的机制&#xff1a; ClassLoader->SecureClassloader–>URLClassLoader–>AppClassLoader loadClass–>findClass(重写方法)–>defineClass(从字节码加载类) 初始化的时候会加载静态代码块 实例化的时候会加载构造代码块、无参构…

45.Redis核心数据结构实战与高性能原理剖析

Redis五种常用数据结构 #redis-cli查看帮助命令 help stringstring 应用场景 //单值缓存 Test public void redisString() throws JsonProcessingException {Jedis jedis pool.getResource();// for (String key : jedis.keys("*")) {// …

单片机设计_RTC时钟(ACM32F403)

一、电路设计 ACM32F403开发板 实现结果&#xff1a;通过串口发送每秒的时间 二、运行结果 三、部分代码 #include "APP.h"UART_HandleTypeDef Uart_Handle;/********************************************************************************* * Function …

Banana Pi BPI-W3(Armsom W3)RK3588开当板之调试UART

前言 本文主要讲解如何关于RK3588开发板UART的使用和调试方法&#xff0c;包括UART作为普通串口和控制台两种不同使用场景 一. 功能特点 Rockchip UART (Universal Asynchronous Receiver/Transmitter) 基于16550A串口标准&#xff0c;完整模块支持以下功能&#xff1a; 支…

gRPC之gateway集成swagger

1、gateway集成swagger 1、为了简化实战过程&#xff0c;gRPC-Gateway暴露的服务并未使用https&#xff0c;而是http&#xff0c;但是swagger-ui提供的调用服 务却是https的&#xff0c;因此要在proto文件中指定swagger以http调用服务&#xff0c;指定的时候会用到文件 prot…

jeecg 重新加载表格

searchQuery() { let id this.$route.query.id; if(id){ this.queryParam.resourceInfoId id//this.$store.state.resourceInfoId }else{ this.queryParam.resourceInfoId } this.loadData();//重新加载表格 this.isShow true; },

深入浅出Dart》函数

函数 Dart语言作为一门面向对象的语言&#xff0c;函数在其中占据了非常重要的位置。本文将详细解析如何定义和调用函数&#xff0c;以及箭头语法&#xff0c;高阶函数和闭包等内容。 1. 函数的定义和调用 在Dart中&#xff0c;函数可以定义为一段实现特定功能的代码块&…