【ElasticSearch】es索引、映射、文档基本操作复杂查询

在这里插入图片描述

  各位小伙伴们大家好,欢迎来到这个小扎扎的ElasticSearch专栏,本篇博客由B战尚硅谷的ElasticSearch视频总结而来,鉴于 看到就是学到、学到就是赚到 精神,这波依然是血赚 ┗|`O′|┛

🌆 内容速览

  • 1 es数据格式
  • 2 es基础操作
    • 2.1 索引的增删查
      • 2.1.1 创建索引
      • 2.1.2 查询索引
      • 2.1.3 删除索引
    • 2.2 映射操作
      • 2.2.1 创建映射
      • 2.2.2 查看映射
    • 2.3 文档的增删改查
      • 2.3.1 创建文档
      • 2.3.2 查询文档
      • 2.3.3 修改文档
      • 2.3.4 删除文档
  • 3 复杂查询
    • 3.1 条件分页查询
      • 3.1.1 查询所有
      • 3.1.2 条件查询
      • 3.1.3 分页条件查询
      • 3.1.4 指定字段返回
      • 3.1.5 指定字段排序
    • 3.2 多字段查询
      • 3.2.1 and条件
      • 3.2.2 or条件
      • 3.2.3 值范围查询
      • 3.2.4 全文检索、完全匹配
      • 3.2.5 高亮返回
    • 3.3 函数查询
      • 3.3.1 分组group by
      • 3.3.2 求和sum
      • 3.3.3 求平均值avg
      • 3.3.4 最大值max
      • 3.3.5 最小值min
      • 3.3.6 一次返回count/max/min/avg/sum
      • 3.3.7 去重后取总数

1 es数据格式

  Elasticsearch 是面向文档型数据库,一条数据在这里就是一个文档。为了方便大家理解,可以将 Elasticsearch 里存储文档数据和关系型数据库 MySQL 存储数据的概念进行一个类比。ES 里的 Index 可以看做一个库,而 Types 相当于表,Documents 则相当于表的行。在这里插入图片描述

需要注意的是:这里 Types 的概念已经被逐渐弱化,Elasticsearch 6.X 中,一个 index 下已经只能包含一个type,Elasticsearch 7.X 中, Type 的概念已经被删除。

2 es基础操作

2.1 索引的增删查

2.1.1 创建索引

  对比关系型数据库,创建索引就等同于创建数据库。通过apifox等工具,向 ES 服务器发 PUT 请求即为创建索引
http://服务器ip:9200/索引名
  
在这里插入图片描述

2.1.2 查询索引

查询指定索引

GET 请求即为查询指定索引
在这里插入图片描述

查看所有的索引信息

GET 请求
http://服务器ip:9200/_cat/indices?v
在这里插入图片描述

2.1.3 删除索引

DELETE 请求即为删除指定索引
在这里插入图片描述

2.2 映射操作

  映射就像是mysql数据表中对字段的限制一样,映射可以指定文档的类型以及能否使用索引

2.2.1 创建映射

PUT 请求
http://服务器ip:9200/索引名/_mapping

{"properties": {"title": {"type": "text","index": true},"category": {"type": "keyword","index": true},"images": {"type": "text","index": false},"price": {"type": "long","index": true}}
}

在这里插入图片描述
📌 index的值若为false的话,即不可被索引,无法通过match等方式进行匹配
📌 store:是否将数据进行独立存储,默认为 false。获取独立存储的字段要比从_source 中解析快得多,但是也会占用更多的空间,所以要根据实际业务需求来设置。
📌 analyzer:分词器,这里的 ik_max_word 即使用 ik 分词器,后面讲解

2.2.2 查看映射

GET 请求
http://服务器ip:9200/索引名/_mapping
在这里插入图片描述

2.3 文档的增删改查

2.3.1 创建文档

向指定索引中添加文档(随机id)

POST 请求
http://服务器ip:9200/索引名/_doc
在这里插入图片描述
📌与索引操作不同的一点是,post请求的请求体中必须包含JSON格式的数据

向指定索引中添加文档(指定id)
  如果通过以上请求创建文档的话,会对该文档返回一个随机生成的_id,后面需要通过该_id对文档进行查询。显而易见,这个随机生成的_id并不容易记忆,于是我们可以通过加一层请求的方式指定文档的_id进行创建

POST 请求
http://服务器ip:9200/索引名/_doc/id值在这里插入图片描述

2.3.2 查询文档

查询指定索引下的指定文档

GET 请求
http://服务器ip:9200/索引名/_doc/id值
在这里插入图片描述

查询指定索引下的所有文档

GET 请求
http://服务器ip:9200/索引名/_search
在这里插入图片描述

2.3.3 修改文档

覆盖性修改(全量更新)

PUT 请求
http://服务器ip:9200/索引名/_doc/id值
在这里插入图片描述
📌全量更新的请求体中需要是全部的字段及值,因为是覆盖性修改,如果缺值的话之前的字段值就会不见

字段修改(局部更新)

POST 请求
http://服务器ip:9200/索引名/_update/id值
在这里插入图片描述
📌局部更新只需要在doc中嵌套想要修改的字段及值,未指定的字段值将保持原状不变
📌如果doc中嵌套的字段在之前的文档中不存在的话,将会作为新的字段及值添加到该文档中

2.3.4 删除文档

DELETE 请求
http://服务器ip:9200/索引名/_doc/id值
在这里插入图片描述
📌如果重复删除或者删除一个不存在的文档,会返回result:not_found

3 复杂查询

3.1 条件分页查询

3.1.1 查询所有

GET 请求
http://服务器ip:9200/索引名/_search

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

在这里插入图片描述

3.1.2 条件查询

GET 请求
http://服务器ip:9200/索引名/_search

{"query": {"match": {"category": "华为"}}
}

在这里插入图片描述

3.1.3 分页条件查询

GET 请求
http://服务器ip:9200/索引名/_search

{"query": {"match": {"category": "华为"}},"from": 0,"size": 2
}

在这里插入图片描述

📌请求体中需要使用以下json形式进行分页条件查询,其中from字段表示从第几条数据开始查询,size字段表示一页返回几条数据
📌如果想要查询指定页数的分页数据,可以通过 (页码-1)*页数算出来from字段的值

3.1.4 指定字段返回

可以通过"_source"字段指定返回结果的字段值

{"query": {"match": {"category": "华为"}},"_source": ["title","category"]
}

在这里插入图片描述

3.1.5 指定字段排序

可以通过"sort"字段指定字段进行排序及其顺序,desc降序asc升序

{"query": {"match": {"category": "华为"}},"sort": {"price": {"order": "desc"}}
}

在这里插入图片描述

3.2 多字段查询

3.2.1 and条件

must = and,转sql  ——>   where category = "华为" and price = 10999
{"query": {"bool": {"must": [{"match": {"category": "华为"}},{"match": {"price": 10999}}]}}
}

3.2.2 or条件

should = or,转sql  ——>   where category = "华为" or category = "小米"
{"query": {"bool": {"should": [{"match": {"category": "华为"}},{"match": {"category": "小米"}}]}}
}

3.2.3 值范围查询

es对应英文全拼sql
gtgreater than>
gtegreater than or equal>=
ltless than<
lteless than or equal<=
以下es的json请求体转sql  ——>   where price >= 100 and price <= 4000
{"query": {"bool": {"filter": {"range": {"price": {"gte": 100,"lte": 4000}}}}}
}

3.2.4 全文检索、完全匹配

全文检索
  使用“match”进行检索的话,会将条件“卡拉米”拆成单个的字,也就是说当所有数据中category字段包含以上三个字中的任何一个查出来。
  于是下面的这个json,把category为小米的文档全查出来了。如果"category": "华米"的话将查出来所有的category包含“华“和”米”的文档都查出来,也就是说小米和华为

{"query": {"match": {"category": "卡拉米"}}
}

完全匹配
  如果将“match”改为“match_phrase”的话,就将是完全匹配。也就是说再使用以下json进行查询的话就会没有数据返回,除非换成“小米”或者“华为”这种全等的条件

{"query": {"match_phrase": {"category": "华米"}}
}

3.2.5 高亮返回

"highlight"字段,"pre_tags"和"post_tags"属性分别是高亮标签的前置标签和后置标签,将fields中指定字段的满足match的字拼接标签高亮返回

{"query": {"match": {"title": "华为"}},"highlight": {"pre_tags": "<font color='red'>","post_tags": "</font>","fields": {"title": {}}}
}

在这里插入图片描述

📌由于match是全文检索,所以会将match里的字拆成单独的字进行高亮标签的拼接
📌不支持数字形式的高亮返回

3.3 函数查询

下述函数查询与高亮highlight正好相反,他们只支持数字类型字段的查询

3.3.1 分组group by

terms = group by,转sql  ——>   group by price
{"aggs": {"price_groupby": {  // 自定义命名"terms": {"field": "price"}}}
}

📌上面不只能查出来分组统计的数量,还能查出来所有文档的详细信息,如果不想让其返回的话,可以使用上面分页的方式"size":0

3.3.2 求和sum

sum = SUM( ),转sql  ——>   select SUM(price)
{"aggs": {"sum_price": {"sum": {"field": "price"}}},"size": 0
}

3.3.3 求平均值avg

avg = AVG( ),转sql  ——>   select AVG(price)
{"aggs": {"avg_price": {"avg": {"field": "price"}}},"size": 0
}

3.3.4 最大值max

max = MAX( ),转sql  ——>   select MAX(price)
{"aggs": {"max_price": {"max": {"field": "price"}}},"size": 0
}

3.3.5 最小值min

min = MIN( ),转sql  ——>   select MIN(price)
{"aggs": {"min_price": {"min": {"field": "price"}}},"size": 0
}

3.3.6 一次返回count/max/min/avg/sum

{"aggs": {"stats_price": {"stats": {"field": "price"}}},"size": 0
}

3.3.7 去重后取总数

cardinality = distinct + COUNT( ),转sql  ——>   select distinct COUNT(price)
{"aggs": {"cardinality_price": {"cardinality": {"field": "price"}}},"size": 0
}

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

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

相关文章

【node版本问题】运行项目报错 PostCSS received undefined instead of CSS string

最近该项目没有做任何修改&#xff0c;今天运行突然跑不起来报错了 PostCSS received undefined instead of CSS string 【原因】突然想起来期间有换过 node 版本为 16.17.1 【解决】将 node 版本换回之前的 14.18.0 就可以了

vue3中基于路由层面和组件层面进行用户角色及权限控制的方法解析

文章目录 一、权限控制二、路由层面控制三、组件层面控制1、使用自定义指令2、使用方法控制3、封装一个权限控制组件来实现组件层面控制权限3.1、组件页面 Authority.vue3.2、使用页面 app.vue3.3、效果预览 一、权限控制 随着前端技术的不断发展&#xff0c;越来越多的前端框…

Linux命令记不住?保姆级教程来了

在软件开发过程中&#xff0c;Linux操作系统因其稳定性、安全性和高效性而备受青睐。作为开发者&#xff0c;熟练掌握Linux常用命令&#xff0c;不仅可以提高工作效率&#xff0c;还能更好地管理服务器和进行代码部署。本文将介绍一些开发常用的Linux命令及其应用场景&#xff…

JavaScript数组常见实例方法:forEach、filter、map、reduce、find、every等

博客背后的故事 其实我23年7月就学过这些数组方法了&#xff0c;但是为什么24年3月才做笔记呢&#xff1f;这就要讲一个小故事了&#xff08;不想听故事的同学自行拖动滚动条&#xff09; 24年年初我和两个队友合作开发一个小程序。JavaScript中数组的实例方法我已经学了很久…

Docker下Jenkins打包java项目并部署

docker 构建Jenkins sudo docker run --namezen_haslett --userjenkins --privilegedtrue --volume/home/cyf/server/jenkins/jenkins_home:/var/jenkins_home -v /usr/lib/jvm/java-17-openjdk-amd64:/usr/lib/jvm/java-17-openjdk-amd64 -v /usr/lib/maven/apache-mav…

VIM编译器的安装

文章目录 前言一、VIM软件安装二、遇到问题三、VIM使用1.文档创建命令touch2.VIM编译器输入模式3.VIM编译器指令模式3.VIM编译器底行模式4.VIM编译器使用小技巧 前言 &#x1f4a6; 我们如果要在终端模式下进行文本编辑或者修改文件就可以使用 VIM 编辑器&#xff0c;VIM 编辑…

treeview控件的应用

1.分类 treeview控件的基本应用&#xff0c;可以用于商品分类、文件分类等等。 2.辅助决策 treeview可以组成决策树&#xff0c;用来帮助人们做选择。比如说今天中午吃什么菜&#xff1f; 如果我来选择的话&#xff0c;那就是&#xff1a;不吃辣-鲁菜-糖醋鲤鱼。 3.求解算…

AD1102 小封装的3.7V锂电池转干电池使用的充放电管理芯片 替代传统干电池、镍氢电池

AD1102是一款锂电池充放电管理专用芯片。充电工作时&#xff0c;可以为 3.7V锂电池进行充电&#xff0c;电流最高可配置 1A。放电工作时&#xff0c;采用开关频率1MHz同步降压转换器进行放电&#xff0c;放电电流可以达到 3A。内部集成欠压保护、短路保护、过温保 护功能。 …

二 centos 7.9 磁盘挂载

上一步 一 windso10 笔记本刷linux cent os7.9系统-CSDN博客 笔记本有两个盘,系统装在128G的系统盘上,现在把另外一个盘挂载出来使用 lsblk 发现磁盘已经分好了,直接挂载就好了,参考文章:Centos7.9 挂载硬盘_centos7.9挂载硬盘-CSDN博客 永久挂载 lsblk -f分区格式化 mkfs…

XUbuntu22.04之reboot关机无效, 定制重启和关机(二百二十)

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

2024届 C++ 刷题 笔试强训 Day 01

选择题 01 以下for循环的执行次数是&#xff08;&#xff09; for(int x 0, y 0; (y 123) && (x < 4); x); A 是无限循环 B 循环次数不定 C 4次 D 3次 解题思路&#xff1a; 我们直接来看本道题中最关键的部分&#xff1a;(y 123) && (x < 4)。 (y…

漏洞挖掘 | 公益SRC上榜技巧

目录 1、寻找漏洞 2、挖掘漏洞 3、提交报告 4、上榜吉时 5、快速上分 6、小技巧&#xff1a;冲榜拿分制胜点-拉开人与人之间的差距 1、寻找漏洞 寻找漏洞的2种办法&#xff1a; 1)谷歌语法 注意&#xff1a;用谷歌语法找站的时候&#xff0c;要加点中文&#xff0c;不然搜…

STL之set容器代码详解

1 基础概念 所有元素都会在插入时自动被排序 本质&#xff1a; set/multiset属于关联式容器&#xff0c;底层结构是用二叉树实现。 set和multiset区别&#xff1a; set不允许容器中有重复的元素&#xff1b; multiset允许容器中有重复的元素 。 2 代码示例 Talk is chea…

Graphpad Prism10.2.1(395) 安装教程 (含Win/Mac版)

GraphPad Prism GraphPad Prism是一款非常专业强大的科研医学生物数据处理绘图软件&#xff0c;它可以将科学图形、综合曲线拟合&#xff08;非线性回归&#xff09;、可理解的统计数据、数据组织结合在一起&#xff0c;除了最基本的数据统计分析外&#xff0c;还能自动生成统…

基于51单片机 模拟简易自动自助售货机设计 智能售卖机系统

1、本设计基于STC89C51/52&#xff08;与AT89S51/52、AT89C51/52通用&#xff0c;可任选&#xff09;&#xff0c;拍的时候要备注&#xff0c;不备注默认发STC89C52RC2、使用单片机设计&#xff0c;设有8个按键&#xff0c;3个硬币模拟按键&#xff08;5元、1元、5角&#xff0…

Day31-计算机基础1

Day31-计算机基础1 1. 网络基础介绍1.1 什么是网络&#xff1f;1.2 为什么要有网络&#xff1f;1.3 运维人员需要学习哪些网络知识&#xff1f;1.4 按作用范围对网络分类 2.网络设备知识2.1 网络传输介质及传输信号2.2 网卡设备2.3 中继器&#xff08;RP repeater&#xff09;2…

JavaScript 实现飞机大战

文章目录 一些关键点概览&#xff1a;核心模块的具体实现示例&#xff1a;飞机类&#xff08;Plane&#xff09;的基本结构&#xff1a;子弹类&#xff08;Bullet&#xff09;的基本结构&#xff1a;敌机类&#xff08;Enemy&#xff09;的基本结构&#xff1a; 基于前面定义的…

SQL盲注-实战布尔盲注

环境&#xff1a;win10 靶场&#xff1a;sqli-labs-master 本实验仅供学习参考&#xff01;&#xff01;&#xff01; 1 布尔盲注 盲注就是在 SQL 注入过程中&#xff0c; SQL 语句执行后&#xff0c;查询到的数据不能 回显到前端页面。此时&#xff0c;我们需要利用一些方…

滤波器:工作原理和分类及应用领域?|深圳比创达电子EMC

滤波器在电子领域中扮演着重要的角色&#xff0c;用于处理信号、抑制噪声以及滤除干扰。本文将详细介绍滤波器的工作原理、分类以及在各个应用领域中的具体应用。 一、滤波器的定义和作用 滤波器是一种电子设备&#xff0c;用于选择性地通过或阻塞特定频率范围内的信号。其主…

iOS增量报告生成方案

一&#xff0c;iOS覆盖率报告生成逻辑 iOS覆盖率报告生成与Android有很大的不同&#xff0c;主要的生成逻辑如下&#xff1a; 1&#xff0c;将profraw文件&#xff0c;通过命令xcrun llvm-profdata merge -sparse转换成profdata; 2&#xff0c;再将profdata文件&#xff0c;通…