第04讲:HTTP操作之ElasticSearch高级查询

news2024/11/8 0:42:58

3.1.4、高级查询

Elasticsearch 提供了基于 JSON 提供完整的查询 DSL 来定义查询
定义数据 :

# POST /student/_doc/1001
{
	"name":"zhangsan", 
	"nickname":"zhangsan", 
	"sex":"男",
	"age":30
}
# POST /student/_doc/1002
{
	"name":"lisi", 
	"nickname":"lisi", 
	"sex":"男", 
	"age":20
}
# POST /student/_doc/1003
{
	"name":"wangwu", 
	"nickname":"wangwu", 
	"sex":"女",
	"age":40
}
# POST /student/_doc/1004
{
	"name":"zhangsan1", 
	"nickname":"zhangsan1", 
	"sex":"女",
	"age":50
}
# POST /student/_doc/1005
{
	"name":"zhangsan2", 
	"nickname":"zhangsan2", 
	"sex":"女",
	"age":30
}

在这里插入图片描述

实验1:查询所有文档

在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search

{
	"query": {
		"match_all": {}
	}
}
# "query":这里的query代表一个查询对象,里面可以有不同的查询属性
# "match_all":查询类型,例如:match_all(代表查询所有),match,term,range等等
# {查询条件}:查询条件会根据类型的不同,写法也有差异

在这里插入图片描述

{
	"took【查询花费时间,单位毫秒】" : 1116, 
	"timed_out【是否超时】" : false, 
	"_shards【分片信息】" : {
		"total【总数】" : 1, 
		"successful【成功】" : 1, 
		"skipped【忽略】" : 0, 
		"failed【失败】" : 0
	},
	"hits【搜索命中结果】" : {
		"total"【搜索条件匹配的文档总数】: {
		"value"【总命中计数的值】: 3,
		"relation"【计数规则】: "eq" # eq 表示计数准确, gte 表示计数不准确
	},
	"max_score【匹配度分值】" : 1.0, 
	"hits【命中结果集合】" : [
	...
	]
}

实验2:匹配查询

match 匹配类型查询,会把查询条件进行分词,然后进行查询,多个词条之间是 or 的关系
在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search

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

在这里插入图片描述

实验3:多字段匹配查询

multi_match 与 match 类似,不同的是它可以在多个字段中查询。
在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search

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

在这里插入图片描述

实验4:关键字精确查询

term 查询,精确的关键词匹配查询,不对查询条件进行分词。
在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search

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

在这里插入图片描述

实验5:多关键字精确查询

terms 查询和 term 查询一样,但它允许你指定多值进行匹配。 如果这个字段包含了指定值中的任何一个值,那么这个文档满足条件,类似于 mysql 的 in 在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search

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

在这里插入图片描述

实验6:指定查询字段

默认情况下,Elasticsearch 在搜索的结果中,会把文档中保存在_source 的所有字段都返回。 如果我们只想获取其中的部分字段,我们可以添加_source 的过滤
在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search

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

在这里插入图片描述

实验7:过滤字段

我们也可以通过:

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

在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search

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

在这里插入图片描述
在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search

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

在这里插入图片描述

实验8:过滤字段

bool把各种其它查询通过must(必须 )、must_not(必须不)、should(应该)的方式进行组合
在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search

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

在这里插入图片描述

实验9:范围查询

range 查询找出那些落在指定区间内的数字或者时间。
range 查询允许以下字符

操作符说明
gt大于>
gte大于等于>=
lt小于<
lte小于等于<=

在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search

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

在这里插入图片描述

实验10:模糊查询

返回包含与搜索字词相似的字词的文档。
编辑距离是将一个术语转换为另一个术语所需的一个字符更改的次数。这些更改可以包括:

  • 更改字符(box → fox)
  • 删除字符(black → lack)
  • 插入字符(sic → sick)
  • 转置两个相邻字符(act → cat)

为了找到相似的术语,fuzzy 查询会在指定的编辑距离内创建一组搜索词的所有可能的变体或扩展。然后查询返回每个扩展的完全匹配。
通过 fuzziness 修改编辑距离。一般使用默认值 AUTO,根据术语的长度生成编辑距离。
在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search

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

在这里插入图片描述
在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search

{
	"query": {
	"fuzzy": {
		"name": {
			"value": "zhansan",
			"fuzziness": 2
			}
		} 
	}
}

在这里插入图片描述

实验11:单字段排序

sort 可以让我们按照不同的字段进行排序,并且通过 order 指定排序的方式。desc 降序,asc 升序。
在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search

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

在这里插入图片描述

实验12:多字段排序

假定我们想要结合使用 age 和 _score 进行查询,并且匹配的结果首先按照年龄排序,然后 按照相关性得分排序
在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search

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

在这里插入图片描述

实验13:高亮查询

在进行关键字搜索时,搜索出的内容中的关键字会显示不同的颜色,称之为高亮。
在这里插入图片描述
Elasticsearch 可以对查询内容中的关键字部分,进行标签和样式(高亮)的设置。
在使用 match 查询的同时,加上一个 highlight 属性:

  • pre_tags:前置标签
  • post_tags:后置标签
  • fields:需要高亮的字段
  • title:这里声明 title 字段需要高亮,后面可以为这个字段设置特有配置,也可以空

在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search

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

在这里插入图片描述

实验14:分页查询

from:当前页的起始索引,默认从 0 开始。 from = (pageNum - 1) * size size:每页显示多少条
在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search

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

在这里插入图片描述

实验15:聚合查询

聚合允许使用者对 es 文档进行统计分析,例如取最大值、平均值等。

  • 对某个字段取最大值 max
  • 对某个字段取最小值 min
  • 对某个字段求和 sum
  • 对某个字段取平均值 avg
  • 对某个字段的值进行去重之后再取总数
  • state 聚合
    • stats 聚合,对某个字段一次性返回 count,max,min,avg 和 sum 五个指标
最大值聚合查询案例

在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search

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

在这里插入图片描述

最小值聚合查询案例

在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search

{
	"aggs":{
		"min_age":{
			"min":{"field":"age"}
		}
	},
	"size":0
}

在这里插入图片描述

求和聚合查询案例

在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search

{
	"aggs":{
		"sum_age":{
			"sum":{"field":"age"}
		}
	},
	"size":0
}

在这里插入图片描述

去重之后再取总数案例
{
	"aggs":{
		"distinct_age":{
			"cardinality":{"field":"age"}
		}
	},
	"size":0
}

在这里插入图片描述

state 聚合案例
{
	"aggs":{
		"stats_age":{
			"stats":{"field":"age"}
		}
	},
	"size":0
}

在这里插入图片描述

实验16:桶聚合查询

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

  • terms 聚合,分组统计
terms 聚合,分组统计案例

在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search

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

在这里插入图片描述

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

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

相关文章

MySQL innodb引擎架构分析-Change Buffer

系列文章目录 1. MySQL innodb引擎架构分析-Buffer Pool 2. MySQL innodb引擎架构分析-Redo log 3. MySQL innodb引擎架构分析- Double Write Buffer 4.MySQL innodb引擎架构分析-Change Buffer 文章目录系列文章目录前言一、Change Buffer是什么&#xff1f;二、Change Buffe…

日本市场的Starday开始对智能家居下重手

自从21世纪以来&#xff0c;物联网就开始进入大众视野&#xff0c;因此作为物联网基础应用的智能家居已经成为人们对生活场景的一种涉嫌。因此在国外市场当中&#xff0c;跨境电商卖家们通过物联网的智慧家居的售卖&#xff0c;获得了大量的资金&#xff0c;可知“跨境沃土”大…

LeetCode54.螺旋矩阵 LeetCode59.螺旋矩阵Ⅱ | 螺旋矩阵问题

LeetCode刷题记录 文章目录LeetCode54.螺旋矩阵思路代码LeetCode59 螺旋矩阵Ⅱ思路代码LeetCode54.螺旋矩阵 给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。 示例一 输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9…

Ubuntu-22 live-server版本安装完成后的配置

软件包管理工具 aptapt 用于取代 apt-get 、apt-cache &#xff0c;apt 将分散在 apt-get 、 apt-cache 的基础操作统一包含在一起apt 与 apt-get 、apt-cache 的对应关系操作aptapt-安装软件包sudo apt install <package>sudo apt-get install <package>卸载软件包…

AcWing 1015. 摘花生(DP)

一、问题描述 二、思路分析 这道题非常类似我们数字三角形那道题&#xff0c;大家如果这道题不会的话&#xff0c;可以先去看作者之前写的数字三角形问题的解法&#xff0c;然后再回来看这道题&#xff0c;或许就能有思路了。 传送门&#xff1a; DP母题——数字三角形 1、状…

Jetpack Compose中的列表

Cloumn 和 Row 如果是普通的不是特别长的列表&#xff0c;可以直接使用 Column 和 Row 组件&#xff0c;默认 Column 和 Row 组件是不支持滚动的&#xff0c;如果需要支持滚动可以在 Column 和 Row 组件上使用 Modifier.verticalScroll() 和Modifier.horizontalScroll() 修饰符…

就在今晚!如何在公益向善的路上坚持前行

&#xff08;本文阅读时间&#xff1a;3分钟&#xff09;如何从支教助学到慈善组织到社会创业&#xff1f;如何从内心深处找回向善的力量&#xff1f;如何在挣扎中坚定前行的方向&#xff1f;本期微软ATP Public 100 公益演讲特邀嘉宾还将为小伙伴们提供干货建议&#xff01;微…

JavaScript刷LeetCode拿offer-树的遍历

什么是树 一种分层数据的抽象模型。前端工作中常见的树包括&#xff1a;DOM树&#xff0c;级联选择&#xff0c;树形控件JS中没有树&#xff0c;可以用Object和Array构建树树的常用操作&#xff1a;深度/广度优先遍历&#xff0c;先中后序遍历 深度优先遍历 访问根节点对根节…

Windows Server【开机启动和任务计划程序】实现服务器重启后项目自启动(Windows Server 任务计划程序无法执行问题处理)

1.问题说明 有些时候我们希望计算机开机后就启动一些服务或应用程序&#xff0c;比如远程工具。这里介绍两种方式。 2.开机启动 使用WinR调出运行&#xff0c;输入&#xff1a; 1️⃣ shell:startup 用户开机自启动&#xff08;程序开机自启动只针对当前登录的用户&#xf…

2分布式微服务技术栈-SpringCloud<Feign>

分布式微服务技术栈Feign HTTP 客户端Feign-基于Feign远程调用Feign-自定义配置Feign HTTP 客户端 Feign-基于Feign远程调用 声明式 事务 spring 声明一个 远程调用 封装 所有 对 userservice 的 远程调用 类似于 controller 的 注解 把接口 注入进来 不仅是 http 客户端 …

Node.js 中的模块化

1、模块化的基本概念 1.1、什么是模块化 模块化是指解决一个复杂问题时&#xff0c;自顶向下逐层把系统划分成若干模块的过程。对于整个系统来说&#xff0c;模块是可组合、分解和更换的单元。 1.2、编程领域中的模块化 编程领域中的模块化&#xff0c;就是遵守固定的规则&a…

探索性数据分析(Exploratory Data Analysis,EDA)

目录参考资料PART 02 探索性数据分析 探索性数据分析(Exploratory Data Analysis&#xff0c;简称EDA)&#xff0c;指对数据分析的过程中尽量不加入先验假设&#xff0c;而是通过作图表和统计等方式来探索数据结构和规律。 EDA最早由John W. Tukey在上世纪70年代被提出&#…

批量下载线上数据文件--业务诉求

诉求接到现场运维诉求&#xff0c;需要获取到指定业务节点的所有附件文件分析某个节点的业务信息&#xff0c;可以通过sql来筛选出全部需要的关联字段信息以及文件磁盘路径和上传路径通过脚本或命令&#xff0c;将sql筛选到的路径文件统一复制到指定目录将复制到的文件下载&…

再学C语言25:分支和跳转——continue、break和switch

一般地&#xff0c;进入循环体后&#xff0c;在下次循环判断之前程序执行循环体中所有语句 一、continue语句 continue&#xff1a;循环中&#xff0c;当运行到该语句时&#xff0c;其将导致剩余的迭代部分被忽略&#xff0c;开始下一次迭代 如果continue处于嵌套结构中&…

【深度学习】李宏毅2021/2022春深度学习课程笔记 - 各式各样神奇的自注意力机制(Self-Attention)变型

文章目录一、Self-Attention 各式各样的变型二、How to make self-attention efficient&#xff1f;三、Notice四、Local Attention / Truncated Attention五、Stride Attention六、Global Attention七、Many Different Choices八、Can we only focus on Critical Parts?8.1 C…

车牌识别应用搭建(含模型和源码)

车牌识别应用搭建 内容说明 本示例旨在展示如何在 DeepStream SDK 版本不低于 5.0.1 的情况下使用分级模型进行检测和分类。 本例中的模型均为TAO3.0模型。 PGIE(car detection) -> SGIE(car license plate detection) -> SGIE(car license plate recognization) 该流…

Linux系统下的rpm/yum管理

文章目录Linux系统下的rpm管理1.介绍2.rpm包的简单查询指令3.rpm包的其它查询指今4.卸载rpm包5.rpm6.yumLinux系统下的rpm管理 1.介绍 rpm用于互联网下载包的打包及安装工具&#xff0c;它包含在某些Linux分发版中。它生成具有.RPM扩展名的文件。RPM是RedHat Package Manager…

Java 集合的介绍和使用

1.什么是集合&#xff1f; 对一些数据的存储就叫做集合&#xff0c;相比于数组&#xff0c;这是一种动态的集合。 1.可以动态的保存任意多个对象 2.提供一些动态操作集合的方法比如&#xff1a;add ,remove ,set ,get 等。 3.使用集合更加方便&#xff0c;提高代码编写效率。…

创建 ASP.NET Core MVC 项目

目录 一、创建ASP.NET Core MVC项目 二、ASP.NET Core MVC目录结构 一、创建ASP.NET Core MVC项目 打开Visual Studio 2022 点击创建新项目 在列表中找到:ASP.NET Core Web应用(模型-试图-控制器):用于创建包含示例ASP.Net Core Mvc视图和控制器的Asp.NET Core应用程序…

Docker如何安装nacos最新版本2.2.0

本文介绍如何在docker容器下安装部署nacos最新版本2.2.0。一、单机本地配置1.1 拉取nacos镜像执行以下命令从docker远端拉取nacos镜像文件。docker pull nacos/nacos-server1.2 启动nacos镜像执行以下命令&#xff0c;以单机模式启动nacos镜像。docker run -d --name nacos -p …