ElasticSearch 增删改查操作

news2024/11/20 11:22:17

本文主要是介绍 ElasticSearch 的文档增删改查和批量操作,同时会介绍一些 REST API 返回状态码的具体含义。

我们先来看下这个表:

在这里插入图片描述
这个表包含了 Index、Create、Read、Update、Delete 这五种方法,我们先来看下 CRUD 操作的 HTTP 请求都长什么样子?

首先是提供一个 HTTP 的 method,后面是索引名字,在 7.0 之后所以的 Type 都用 _doc 表示,后面是文档 id。

再简单了解了 CURD 操作的 HTTP 请求后,那么让我们先来了解下如何创建文档:

1 创建文档

在这里插入图片描述
Create 支持两种方式,一种是指定文档 id 创建文档,像上面这张图就是;另一种是通过调用 post /users/_doc 去让 ES 自动生成文档 id。

自己指定文档 id创建文档,需要考虑 id 的均衡性,避免产生分配不均衡的问题。ES 的 hash 函数会确保文档 id 被均匀分配到不同的分片。

当我们执行刚才的命令,可以返回如下结果:

在这里插入图片描述
其中 _version 每一次操作,都会 + 1,它是一个锁的机制,当并行修改文档的时候,更新的版本号比文档当前的版本号小时就会报错,不允许做修改。

创建文档时,如果索引不存在,ES 会自动创建对应的 index 和 type。

接下来看下另一种创建文档的方式,不指定 id 创建文档,HTTP 请求也变为了 POST,具体的请求如下:

在这里插入图片描述
返回的结果如下:

在这里插入图片描述
Index 和 Create 区别为:如果文档不存在,就索引新的文档,否则现有文档就会被删除,新的文档被索引,版本信息 _version + 1。

2 查询文档

Get 方法比较简单,只需要 Get 索引名称/_doc/文档 id,通过执行这个命令就可以知道文档的具体信息了。

在这里插入图片描述
当执行这条语句后会返回 HTTP 200,具体返回结果如下:

在这里插入图片描述
其中 _index 为索引,_type 为类型,_id 为文档 id,_version 为版本信息,_source 存储了文档的完整原始数据。

当查询的文档 id 不存在的时候,会返回 HTTP 404,且 found 为 false,具体结果如下:

在这里插入图片描述

2 更新文档

Update 方法采用 HTTP POST,在请求体中必须指明 doc,在把具体文档提供在 HTTP 的 body 里。Update 和 Index 方法不同,Update 方法不会删除原来的文档,而是实现真正的数据更新。

比如在原来的文档 id 为 1 的文档上增加字段,具体请求如下:

在这里插入图片描述
执行后,版本信息 _version + 1,让我们再去查询下该文档:

在这里插入图片描述
可以看到,新增字段已经成功了。

3 删除文档

Delete 方法也很简单,Delete 索引名称/_doc/文档 id 就可以了,在这里就不再做代码演示了。

在介绍完文档的基本 CRUD 操作后,让我们来看看批量操作吧:

4 Bulk API

在一个 REST 请求中,重新建立网络开销是十分损耗性能的,因此 ES 提供 Bulk API,支持在一次 API 调用中,对不同的索引进行操作,从而减少网络传输开销,提升写入速率。

它支持 Index、Create、Update、Delete 四种类型操作,可以在 URI 中指定索引,也可以在请求的方法体中进行。

同时多条操作中如果其中有一条失败,也不会影响其他的操作,并且返回的结果包括每一条操作执行的结果。

比如输入如下代码:

在这里插入图片描述
当我们执行命令后,结果如下:

在这里插入图片描述
took 表示消耗了 93 毫秒,errors 为 true 表示在这些操作中错误发生,发现是 update 操作发生了错误,id 为 2 的文档不存在,所以报错了。

在使用 Bulk API 的时候,当 errors 为 true 时,需要把错误的操作修改掉,防止存到 ES 的数据有缺失。

5 批量查询文档

批量查询需要指明要查询文档的 id,可以在一个 _mget 操作里查询不同索引的数据,可以减少网络连接所产生的开销,提高性能。

下面我们来实际操作下,输入以下代码执行,就可以得到文档 id 为 1,3 的数据。

在这里插入图片描述
运行结果如下:

在这里插入图片描述
在介绍完文档的一些操作,最后让我们看下 REST API 常见错误返回有哪些吧!

6 REST API 常见错误返回

刚才在演示中,当查询文档 id 不存在的时候就会报 404 错误,而且 ES 还有各种各样的返回,下面通过一个表格了解下:

在这里插入图片描述

7 总结

本文主要介绍了文档的 CRUD 操作,还有 Bulk API、_mget API,这些批量操作可以提高 API 调用性能,但是不要一次发送过多数据,也有可能会对 ES 集群产生过大的压力,导致性能有所下降。一般建议是 1000-5000 个文档,如果你的文档很大,可以适当减少队列,大小建议是 5-15 MB,默认不能超过 100 M。

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

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

相关文章

美团拼图滑块

有时候放弃也是一种智慧。 就像这说的一样,美团的拼图滑块,不知道这个缺口该怎么去处理,正常划顶到最外面去了,所以就不知道这个是咋计算的。 先来看看他的这个加密,跟原来的一划到底其实是一样的,难度只是…

php+vue3实现点选验证码

buildadmin 中的点选验证码实现 验证码类 <?phpnamespace ba;use Throwable; use think\facade\Db; use think\facade\Lang; use think\facade\Config;/*** 点选文字验证码类*/ class ClickCaptcha {/*** 验证码过期时间(s)* var int*/private int $expire 600;/*** 可以…

萌宠俱乐部

一、html代码 二、CSS代码 三、效果图 四、继续努力呀&#xff01;&#xff01;&#xff01; 一、html代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"wi…

如何使用线性模型的【分箱】操作处理非线性问题

让线性回归在非线性数据上表现提升的核心方法之一是对数据进行分箱&#xff0c;也就是离散化。与线性回归相比&#xff0c;我们常用的一种回归是决策树的回归。为了对比不同分类器和分箱前后拟合效果的差异&#xff0c;我们设置对照实验。 生成一个非线性数据集前&#xff0c;…

Java计算数据百分比

public class CalculatePCT {public static void main(String[] args) {System.out.println(getPercent(9, 100));System.out.println(getPercent2(3, 7));}/*** 方式一&#xff1a;使用java.text.NumberFormat实现*/public static String getPercent(int x, int y) {double d1…

ACM练习——第二天

今天又是一天课&#xff0c;满课&#xff0c;很累哈&#xff0c;计组真的挺难的&#xff0c;但是多学学还是可以学明白。行吧&#xff0c;继续进入今天的ACM练习&#xff0c;现阶段都是主要练习Java到C的语言过渡。 因为今天的题目多半都是昨天的延伸&#xff0c;我就不提供Jav…

Java主流分布式解决方案多场景设计与实战

Java的主流分布式解决方案的设计和实战涉及到多个场景&#xff0c;包括但不限于以下几点&#xff1a; 分布式缓存&#xff1a;在Java的分布式系统中&#xff0c;缓存是非常重要的一部分。常用的分布式缓存技术包括Redis、EhCache等。这些缓存技术可以用来提高系统的性能和响应…

2023软件测试面试跳槽必备

你眼中的软件测试岗位是怎样的&#xff1f;大部分人可能会给出这样的回答&#xff1a;“测试&#xff1f;简单啊&#xff0c;没什么技术含量&#xff0c;无非就是看需求、看业务手册、看设计文档、然后点点功能是否实现&#xff0c;麻烦点的就是测试下部署安装是否出现兼容性问…

开讲:长江航道工程局举办首届云表无代码培训班

11月9日至10日&#xff0c;公司联合珠海乐图软件有限公司在总部机关举办了首届云表无代码编程开发初级培训班。公司所属单位工程、成本、财务等相关业务部门及项目部管理人员参加培训&#xff0c;公司总工程师张晏方作开班动员讲话。 张晏方指出&#xff0c;公司自主开发的云表…

java生成docx文档, docx文档动态饼图

背景: 最近接了个需求, 要求生成日报, 大概如下图所示: 其中*表示变量, 看到要动态生成doc给我难受坏了,为什么会有这种需求? 然后看到里面还要动态生成饼图, oh, no.........没有办法, 硬着头皮上吧. 于是就搜了下java生成docx的方式, 看到的, 比较靠谱的一种通过freemake…

【每日一题】1334. 阈值距离内邻居最少的城市-2023.11.14

题目&#xff1a; 1334. 阈值距离内邻居最少的城市 有 n 个城市&#xff0c;按从 0 到 n-1 编号。给你一个边数组 edges&#xff0c;其中 edges[i] [fromi, toi, weighti] 代表 fromi 和 toi 两个城市之间的双向加权边&#xff0c;距离阈值是一个整数 distanceThreshold。 …

[Linux] ssh远程访问及控制

一、ssh介绍 1.1 SSH简介 SSH&#xff08;Secure Shell&#xff09;是一种安全通道协议&#xff0c;主要用于实现远程登录、远程复制等功能的字符接口。SSH 协议包括用户在登录时输入的用户密码、双方之间的通信。 加密数据传输&#xff0c;SSH 是一种建立在应用层和传输层上…

<MySQL> 查询数据进阶操作 -- 聚合查询

目录 一、聚合查询概述 二、聚合函数查询 2.1 常用函数 2.2 使用函数演示 2.3 聚合函数参数为*或列名的查询区别 2.4 字符串不能参与数学运算 2.5 具有误导性的结果集 三、分组查询 group by 四、分组后条件表达式查询 五、MySQL 中各个关键字的执行顺序 一、聚合查询…

【2013年数据结构真题】

highlight: a11y-dark 41题 王道解析&#xff1a; 算法的策略是从前向后扫描数组元素&#xff0c;标记出一个可能成为主元素的元素Num 。然后重新计数&#xff0c;确认Num是否是主元素。算法可分为以下两步&#xff1a; 选取候选的主元素&#xff1a;依次扫描所给数组中的每个…

【数据结构 | 链表】leetcode 2. 两数相加

个人主页&#xff1a;兜里游客棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里游客棉花糖 原创 收录于专栏【LeetCode】 原题链接&#xff1a;点击直接跳转到该题目 目录 题目描述解题代码 题目描述 给你两个 非空 的链表&#xff0c;表示两个非…

降低城市内涝风险,万宾科技内涝积水监测仪的作用

频繁的内涝会削弱和损坏城市的关键基础设施&#xff0c;包括道路、桥梁和公用设施。城市内涝风险降低可以减少交通中断事件&#xff0c;也可以保护居民安全并降低路面维修等成本&#xff0c;进一步确保城市基本服务继续发挥作用。对城市可持续发展来讲有效减少内涝的风险是重要…

ESP32网络开发实例-将DS18B20传感器读数发送到InfluxDB

将DS18B20传感器读数发送到InfluxDB 文章目录 将DS18B20传感器读数发送到InfluxDB1、InfluxDB、DS18B20介绍2、软件准备3、硬件准备4、代码实现在本文中,我们将介绍如何将 DS18B20传感器读数发送到 InfluxDB 时间序列数据库。 使用 InfluxDB 数据库的一大特点是可以在确定的时…

python 爬虫之requests 库以及相关函数的详细介绍

get 函数 当你使用 requests.get 函数时&#xff0c;你可以按照以下步骤来发起一个 GET 请求&#xff1a; 导入 requests 模块&#xff1a; 在你的 Python 脚本或程序中&#xff0c;首先导入 requests 模块。 import requests指定目标 URL&#xff1a; 设置你要请求的目标 URL…

4路光栅尺磁栅尺编码器解码转换5MHz高速差分信号转Modbus TCP网络模块 YL97-RJ45

特点&#xff1a; ● 光栅尺磁栅尺解码转换成标准Modbus TCP协议 ● 光栅尺5V差分信号直接输入&#xff0c;4倍频计数 ● 模块可以输出5V的电源给光栅尺供电 ● 高速光栅尺磁栅尺计数&#xff0c;频率可达5MHz ● 支持4个光栅尺同时计数&#xff0c;可识别正反转 ● 可网…

啊?印第安碳纤维限量款?复古与性能的结合吗Indian FTR x 100% R Carbon

印第安作为美国的老牌摩托车厂大家都不陌生了&#xff0c;和哈雷有一点比较大的区别是印第安的车还是考虑马力性能的&#xff0c;也是敢于标出自己的马力参数数据&#xff0c;就比如印第安的FTR系列。 以泥地赛道为灵感设计的印第安FTR运动街车发布了最新的限量联名款车型&…