es内嵌文档查询_ElasticSearch 文档的增删改查都不会?
本文主要是介绍 ElasticSearch 的文档增删改查和批量操作,同时会介绍一些 REST API 返回状态码的具体含义。
我们先来看下这个表:
这个表包含了 Index、Create、Read、Update、Delete 这五种方法,我们先来看下 CRUD 操作的 HTTP 请求都长什么样子?
首先是提供一个 HTTP 的 method,后面是索引名字,在 7.0 之后所以的 Type 都用 _doc
表示,后面是文档 id。
再简单了解了 CURD 操作的 HTTP 请求后,那么让我们先来了解下如何创建文档:
创建文档
Create 支持两种方式,一种是指定文档 id 创建文档,像上面这张图就是;另一种是通过调用 post /users/_doc
去让 ES 自动生成文档 id。
自己指定文档 id创建文档,需要考虑 id 的均衡性,避免产生分配不均衡的问题。 ES 的 hash 函数会确保文档 id 被均匀分配到不同的分片。
当我们执行刚才的命令,可以返回如下结果:
其中 _version
每一次操作,都会 + 1,它是一个锁的机制,当并行修改文档的时候,更新的版本号比文档当前的版本号小时就会报错,不允许做修改。
创建文档时,如果索引不存在,ES 会自动创建对应的 index 和 type。
接下来看下另一种创建文档的方式,不指定 id 创建文档,HTTP 请求也变为了 POST,具体的请求如下:
返回的结果如下:
Index 和 Create 区别为:如果文档不存在,就索引新的文档,否则现有文档就会被删除,新的文档被索引,版本信息 _version
+ 1。
查询文档
Get 方法比较简单,只需要 Get 索引名称/_doc/文档 id
,通过执行这个命令就可以知道文档的具体信息了。
当执行这条语句后会返回 HTTP 200,具体返回结果如下:
其中 _index
为索引,_type
为类型,_id
为文档 id,_version
为版本信息,_source
存储了文档的完整原始数据。
当查询的文档 id 不存在的时候,会返回 HTTP 404,且 found
为 false
,具体结果如下:
更新文档
Update 方法采用 HTTP POST,在请求体中必须指明 doc,在把具体文档提供在 HTTP 的 body 里。Update 和 Index 方法不同,Update 方法不会删除原来的文档,而是实现真正的数据更新。
比如在原来的文档 id 为 1 的文档上增加字段,具体请求如下:
执行后,版本信息 _version
+ 1,让我们再去查询下该文档:
可以看到,新增字段已经成功了。
删除文档
Delete 方法也很简单,Delete 索引名称/_doc/文档 id
就可以了,再这里就不再做代码演示了。
在介绍完文档的基本 CRUD 操作后,让我们来看看批量操作吧:
Bulk API
在一个 REST 请求中,重新建立网络开销是十分损耗性能的,因此 ES 提供 Bulk API,支持在一次 API 调用中,对不同的索引进行操作,从而减少网络传输开销,提升写入速率。
它支持 Index
、Create
、Update
、Delete
四种类型操作,可以在 URI 中指定索引,也可以在请求的方法体中进行。
同时多条操作中如果其中有一条失败,也不会影响其他的操作,并且返回的结果包括每一条操作执行的结果。
比如输入如下代码:
当我们执行命令后,结果如下:
took
表示消耗了 93 毫秒,errors
为 true
表示在这些操作中错误发生,发现是 update 操作发生了错误,id 为 2 的文档不存在,所以报错了。
在使用 Bulk API 的时候,当 errors
为 true
时,需要把错误的操作修改掉,防止存到 ES 的数据有缺失。
批量查询文档
批量查询需要指明要查询文档的 id,可以在一个 _mget
操作里查询不同索引的数据,可以减少网络连接所产生的开销,提高性能。
下面我们来实际操作下,输入以下代码执行,就可以得到文档 id 为 1,3 的数据。
运行结果如下:
在介绍完文档的一些操作,最后让我们看下 REST API 常见错误返回有哪些吧!
REST API 常见错误返回
刚才在演示中,当查询文档 id 不存在的时候就会报 404 错误,而且 ES 还有各种各样的返回,下面通过一个表格了解下:
总结
本文主要介绍了文档的 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
es内嵌文档查询_ElasticSearch 文档的增删改查都不会?相关推荐
- beego原生mysql查询_go——beego的数据库增删改查
一直都不理解使用go语言的时候,为什么还要自己去装beego,以为使用go便可以解决所有的问题,结果在朋友的点拨下,才意识到: go与beego的关系就好比是nodejs与thinkjs的关系,因此也 ...
- 2.非关系型数据库(Nosql)之mongodb:mongodb显示所有数据库,使用数据库,集合创建(显示和隐式创建),集合查询,初步数据的增删改查,分页
1代开一个cmd窗口,当作mongodb客户端,执行以下命令: mongo localhost:27017 2查看所有的数据库: > show dbs; admin (empty) loc ...
- VisualStudio2013内置SQLServer入门(二)--增删改查
前一篇 http://www.cnblogs.com/qixi233/p/4766451.html 这篇是sqlserver的操作 界面比较走心哈哈哈,将就着看,主要就是下面增删改查四个btn 对于s ...
- 商城项目16_es简介、详解倒排索引、安装es以及kibana、检索es基本信息、增删改查文档
文章目录 ①. es - 背景.概述.功能.场景 ②. 核心概念 - 索引.类型.文档.映射 ③. es - 详解倒排索引 ④. 安装elasticSearch.kibana 7.4.2 ⑤. 索引操 ...
- 分布式搜索elasticsearch 索引文档的增删改查 入门
分布式搜索elasticsearch 索引文档的增删改查 入门 1.RESTful接口使用方法 为了方便直观我们使用Head插件提供的接口进行演示,实际上内部调用的RESTful接口. RESTful ...
- [MongoDB] MongoDB的基本操作以及文档的增删改查
参考视频 链接:https://pan.baidu.com/s/1tAWPEC8yppyrPupkUFdCWQ 提取码:gdn8 MongoDB的基本操作 基本概念 生活中:仓库.架子.物品 计算机: ...
- java jdom进行xml的增删改差_java使用DOM对XML文档进行增删改查操作实例代码
本文研究的主要是java使用DOM对XML文档进行增删改查操作的相关代码,具体实例如下所示. 源代码: package com.zc.homeWork18; import java.io.File; ...
- java之全文索引搜索lucene之增删改查文档与中文分词搜索
java之全文索引搜索lucene之增删改查文档与中文分词搜索 接上文,接下来介绍一个lucene的各种query,然后介绍一下中文全文索引搜索. 对于各种query,我就直接上代码了,具体的话,我已 ...
- 学生的新增mySQL文档_MySQL增删改查
连接命令:mysql -h[主机地址] -u[用户名] -p[用户密码] 创建数据库:create database [库名] 显示所有数据库: show databases; 打开数据库:use [ ...
最新文章
- linux 唯一行数量,linux – 确定bash中具有awk或类似内容的唯一行数
- Yinchuan-B The Great Wall
- mybatis和hibernate的区别---Mybatis的学习笔记(四)
- 块存储、文件存储、对象存储意义及差异
- java互联网架构师入门进阶之路
- python学习笔记(10)--组合数据类型(序列类型)
- 严格地说来的zhajinhuagame
- 简述什么是 Cloud Native
- 解决Mysql数据量大的时候 分页优化(使用limit)的问题
- 清华大学王行言教授DELPHI程序设计在线学习
- vivo手机刷鸿蒙教程,vivo手机怎么刷机_vivo手机刷机全教程
- 触屏查看大图(可以缩放)
- xbox360fsd更新游戏封面_xbox360自制系统fsd更新封面教程
- Win10操作系统下,如何确定电脑位数(图文教程)
- 新建 umi 项目,Error: Rendered more hooks 或者 Rendered fewer hooks
- 别再说不会分析多选题了!这6种方法解决你的烦恼!
- 面对新的挑战,成为更好的自己--进击的技术er
- PawningShop:一种NFT抵押借贷的实现
- python四级是什么水平_英语四级相当于什么水平?
- 亚马逊运营知识:亚马逊排名规则是怎么样的
热门文章
- vue+node前后端分离接口调用(初学者)
- java的整数扩展,浮点数扩展,字符扩展,转义字符,布尔值扩展
- Android 控件 - TextView
- mongodb java spring_[Java教程]Spring 与 mongoDB 整合
- python3前面加b_Python3 字符串前面加u,r,b的含义
- Python 线程条件变量 Condition - Python零基础入门教程
- java定时器 并发_【java多线程与并发库】— 定时器的应用 | 学步园
- background的用法css,关于CSSbackground的使用方法
- python可以构建sem模型_python-分组的熊猫DataFrames:如何将scipy.stats.sem应用于它们?...
- 征途2无法显示服务器列表,解决win10系统玩征途2提示“DriverCommlnit驱动加载失败”的方法...