es内嵌文档查询_ElasticSearch 文档的增删改查都不会?

6df9826329a0d2ea35277f300c6e7835.png

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

我们先来看下这个表:

6d5c0f8d8d5b099393b853d8457f5a08.png

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

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

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

创建文档

09d5d3b5892709f312a21ca4c046f1a0.png

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

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

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

135cf03460882e945d3fddca29949ade.png

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

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

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

c9989d6b8036a24bad05219c1bca96c5.png

返回的结果如下:

bc3841663fdbaad6a64ff01a5b9107b8.png

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

查询文档

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

55f14f2e43d1a484bb78657c48554619.png

当执行这条语句后会返回 HTTP 200,具体返回结果如下:

65d1de15a7f614038836f3a1269ac80f.png

其中 _index 为索引,_type 为类型,_id 为文档 id,_version 为版本信息,_source 存储了文档的完整原始数据。

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

cf5f17e8a2ee0a69ae9680e1e13df80f.png

更新文档

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

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

e4df3a43f2dedace6534582b42b6557f.png

执行后,版本信息 _version + 1,让我们再去查询下该文档:

45518a654f637b43784878c2f21811ba.png

可以看到,新增字段已经成功了。

删除文档

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

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

Bulk API

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

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

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

比如输入如下代码:

45514ab79d18442373c2c6b470bf610b.png

当我们执行命令后,结果如下:

ecf2b2c9b10f33c1d488ec2c669d0aad.png

took 表示消耗了 93 毫秒,errorstrue 表示在这些操作中错误发生,发现是 update 操作发生了错误,id 为 2 的文档不存在,所以报错了。

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

批量查询文档

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

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

4b468b866c74a26b17091293c015fbc8.png

运行结果如下:

c91b4b71fd7a7e0ef830f490b22a014c.png

在介绍完文档的一些操作,最后让我们看下 REST API 常见错误返回有哪些吧!

REST API 常见错误返回

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

503999d810f361ce15e955f1a3b23547.png

总结

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

参考文献
Elastic Stack从入门到实践
Elasticsearch顶尖高手系列
Elasticsearch核心技术与实战https://www.elastic.co/guide/en/elasticsearch/reference/7.1/docs-index_.html

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

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

相关文章

如何在ps添加箭头_「PS精选案例教程」制作斑驳生锈字体

这个教程会教您如何设计发光斑驳的字体特效,会教您运用PS滤镜和纹理图片,同时也诠释了如何运用笔刷和图层样式给最终的字体效果增添光感。来,先看看最终效果!第一步:创建一个1024*768的新文档。前景色#532118&#xff…

车辆调度 matlab,基于遗传算法的车辆调度问题的matlab源程序

越界 发表于 2013-7-8 09:16 有偿服务哦function chushis)K4; %最多4辆车inn100;%迭代次数上限citynum8;%需求点数量KMcitynumK1; %配送途径种类%产生初始种群mzeros(1,inn);mm;szeros(inn,citynumK1);for i1:1:inns(i,:)randperm(KM); %随机排列构成个体ends[m s];for i1:inn…

strtotime()加半个小时_椰子鸡这样做太好吃了,一滴水不用加,鲜香嫩滑,做法非常简单...

转眼就是6月了,时间真的好快啊,好似白驹过隙,一眼就过去了。刚刚还是桃花开的时候,转眼五月桃都熟了。不得不说,李煜说得很对,“林花谢了春红,太匆匆!”6月了,6月有什么呢…

webpack 入口文件 php,如何实现webpack多入口文件打包配置

本篇文章主要介绍了webpack多入口文件页面打包配置详解,现在分享给大家,也给大家做个参考。大多数情况下,我们使用 webpack来打包单页应用程序,这个时候只需要配置一个入口,一个模板文件,但也不尽是如此&am…

接口里面的方法都是抽象方法吗_大家都在讲高中学习的方法有哪些,那方法和技巧有什么异同的吗?...

大家都在讲高中学习的方法有哪些,那方法和技巧有什么异同吗?高中怎样学习,方法重要还是技巧更重要?老牛倒是觉得,二者密不可分,缺一不可。那么,我们一起来看看,高中怎样学习才是最好…

python 笔试题 英方_4000字转型数据分析师笔试面试经验分享

大家好,我是戴师兄~在上一篇文章中我分享了快速自学数据分析的经验。本篇文章,我将跟大家分享下我的笔试和面试心得。开头先说说我转型前的职业背景:想看笔试面试经验的同学萌可以直接跳过这一段~2018年我从中国人民大学经济管理学专业毕业&a…

android 抓取webview中的所有图片_如何一键提取PDF文档中的所有图片?

原标题:如何一键提取PDF文档中的所有图片?目前PDF文档被大家广泛应用,主要是因为PDF文档在传输和转换的过程中比较稳定,所以PDF格式几乎是办公文件格式的首选。大家都知道PDF文档转换格式以及编辑都需要专门的PDF编辑器来实现。但…

php shell 交互,通过 Tinker 实现 Laravel 命令行交互式 Shell

通过 Tinker 实现 Laravel 命令行交互式 Shell由 学院君 创建于2年前, 最后更新于 1年前版本号 #19508 views4 likes0 collectsREPL 与 PsySHLaravel 自带了一个功能强大的 REPL —— Tinker,所谓 REPL,是 Read–Eval–Print-Loop 的缩写,这是…

戴尔电脑好还是华为好_华硕和戴尔笔记本哪种好 华硕和戴尔优缺点分析【详解】...

随着时代快速的发展,笔记本电脑已经成了我们生活中的标配。如今,市面上笔记本电脑的款式众多,相信大家对华硕和戴尔并不陌生吧!那么,我们该怎么去选择呢?今天小编就给大家介绍华硕和戴尔笔记本哪个好&#…

电脑扫描二维码_线上分享 | 网络工作坊:平板电脑工作术

澳门生产力暨科技转移中心将于9月29日下午3时,举办资讯科技工具应用线上工作坊,讲解平板电脑办公应用,欢迎有兴趣人士报名,名额有限,先到先得。该中心早前已举办是次主题的应用工作坊,坊间反应积极&#xf…

数据库设置_CentOS7 - 设置MySQL数据库

设置MySQL数据库本文介绍如何在CentOS上执行流行的MySQL数据库服务器的基本安装。 MySQL是当今使用最广泛的数据库系统,它可以在许多不同的行业中找到,为动态网站和大型数据仓库等各种产品提供数据存储。准备此配方要求CentOS系统具有有效的网络连接和管…

提出离职后怎么定last day_不管你因为什么离职,用正规的离职方式是你最正确的选择!...

#不管你是因为什么离职,用正规的离职方式离职是你最正确的选择,如果因为不恰当的方式造成与公司的矛盾,可能让你今后会非常被动。书面离职是最具有法律效力的,按照劳动法,你有权在提出正式离职一个月后走人&#xff0c…

人脸识别代码_10行代码实现人脸识别

什么是人脸识别人脸识别,是基于人的脸部特征信息进行身份识别的一种生物识别技术。用摄像机或摄像头采集含有人脸的图像或视频流,并自动在图像中检测和跟踪人脸,进而对检测到的人脸进行脸部识别的一系列相关技术,通常也叫做人像识…

ticketvalidationexception票根不符合目标服务_如何在有效降低企业仓储成本的同时不降低企业的总体服务质量目标水平?...

对于企业而言,如何降低仓储成本,同时要保证物流总成本最低和不降低企业的总体服务质量和目标水平的前提下进行,常见的措施有以下几点:一用“先进先出方式,减少仓储物的保管风险。”先进先出是储存管理的准则之一&#…

python科学计算_可视化图解Python科学计算包NumPy

NumPy包是python生态系统中数据分析、机器学习和科学计算的主力。 它极大地简化了向量和矩阵的操作。Python的一些主要软件包依赖于NumPy作为其基础架构的基础部分(例如scikit-learn、SciPy、pandas和tensorflow)。我们将介绍一些使用NumPy的主要方法&am…

php 导出excel 特殊字符,PHPEXCEL导出,存在特殊字符遇到的问题

[13] > Array([payment_success_at] >[user_name] > ?.琳琳?[remarks] >[product_name] > 香菇[sku_name] > 斤[product_property] > 斤[price_original] > 5.50[price_current] > 5.50[consignee] > ?.琳琳?)以上代码中用户名中存在特殊符号…

win10任务栏怎么还原到下面_详解:新版 WIN 10 V2004 任务栏和开始菜单全透明

是不是很酷炫?继续往下看,你也可以简单做到导语本文将告诉你如何借助一个小工具,将最新版 WIN 10 开始菜单和任务栏设置成全透明,以获得超酷的视觉体验。安装和设置都很简单,关键是一定要找到适合 WIN 10 版本的 Start…

10.8.8.8柠檬wifi网页登录_基于企业邮箱进行wifi实名认证的方案

之前我们介绍过如何用钉钉认证和企业微信认证来实现企业内部的实名上网认证。此外邮箱认证也是企业进行wifi实名认证的一个有效手段。因为很多企业都给员工开通了企业邮箱,直接让员工输入邮箱账号和密码进行认证上网。配置、使用和维护都相对比较简单。本文我将介绍…

php tire树,Immutable.js源码之List 类型的详细解析(附示例)

本篇文章给大家带来的内容是关于Immutable.js源码之List 类型的详细解析(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。一、存储图解我以下面这段代码为例子,画出这个List的存储结构:let myL…

nodejs missing script: dev_nodejs深入学习系列之v8基础篇

V8这个概念大家都不陌生了,那么你动手编译过V8源码吗?编译后有尝试去了解V8背后的一些概念吗?如果没有,那么也不用心慌,下文将跟大家一一解释这些东西。在编译V8之前我们先要了解一个东西-构建系统1、构建系统1.1、构建…