本文主要是介绍 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,且 foundfalse,具体结果如下:

更新文档

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 调用中,对不同的索引进行操作,从而减少网络传输开销,提升写入速率。

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

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

比如输入如下代码:

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

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

在使用 Bulk API 的时候,当 errorstrue 时,需要把错误的操作修改掉,防止存到 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 文档的增删改查都不会?相关推荐

  1. beego原生mysql查询_go——beego的数据库增删改查

    一直都不理解使用go语言的时候,为什么还要自己去装beego,以为使用go便可以解决所有的问题,结果在朋友的点拨下,才意识到: go与beego的关系就好比是nodejs与thinkjs的关系,因此也 ...

  2. 2.非关系型数据库(Nosql)之mongodb:mongodb显示所有数据库,使用数据库,集合创建(显示和隐式创建),集合查询,初步数据的增删改查,分页

     1代开一个cmd窗口,当作mongodb客户端,执行以下命令: mongo localhost:27017 2查看所有的数据库: > show dbs; admin (empty) loc ...

  3. VisualStudio2013内置SQLServer入门(二)--增删改查

    前一篇 http://www.cnblogs.com/qixi233/p/4766451.html 这篇是sqlserver的操作 界面比较走心哈哈哈,将就着看,主要就是下面增删改查四个btn 对于s ...

  4. 商城项目16_es简介、详解倒排索引、安装es以及kibana、检索es基本信息、增删改查文档

    文章目录 ①. es - 背景.概述.功能.场景 ②. 核心概念 - 索引.类型.文档.映射 ③. es - 详解倒排索引 ④. 安装elasticSearch.kibana 7.4.2 ⑤. 索引操 ...

  5. 分布式搜索elasticsearch 索引文档的增删改查 入门

    分布式搜索elasticsearch 索引文档的增删改查 入门 1.RESTful接口使用方法 为了方便直观我们使用Head插件提供的接口进行演示,实际上内部调用的RESTful接口. RESTful ...

  6. [MongoDB] MongoDB的基本操作以及文档的增删改查

    参考视频 链接:https://pan.baidu.com/s/1tAWPEC8yppyrPupkUFdCWQ 提取码:gdn8 MongoDB的基本操作 基本概念 生活中:仓库.架子.物品 计算机: ...

  7. java jdom进行xml的增删改差_java使用DOM对XML文档进行增删改查操作实例代码

    本文研究的主要是java使用DOM对XML文档进行增删改查操作的相关代码,具体实例如下所示. 源代码: package com.zc.homeWork18; import java.io.File; ...

  8. java之全文索引搜索lucene之增删改查文档与中文分词搜索

    java之全文索引搜索lucene之增删改查文档与中文分词搜索 接上文,接下来介绍一个lucene的各种query,然后介绍一下中文全文索引搜索. 对于各种query,我就直接上代码了,具体的话,我已 ...

  9. 学生的新增mySQL文档_MySQL增删改查

    连接命令:mysql -h[主机地址] -u[用户名] -p[用户密码] 创建数据库:create database [库名] 显示所有数据库: show databases; 打开数据库:use [ ...

最新文章

  1. linux 唯一行数量,linux – 确定bash中具有awk或类似内容的唯一行数
  2. Yinchuan-B The Great Wall
  3. mybatis和hibernate的区别---Mybatis的学习笔记(四)
  4. 块存储、文件存储、对象存储意义及差异
  5. java互联网架构师入门进阶之路
  6. python学习笔记(10)--组合数据类型(序列类型)
  7. 严格地说来的zhajinhuagame
  8. 简述什么是 Cloud Native
  9. 解决Mysql数据量大的时候 分页优化(使用limit)的问题
  10. 清华大学王行言教授DELPHI程序设计在线学习
  11. vivo手机刷鸿蒙教程,vivo手机怎么刷机_vivo手机刷机全教程
  12. 触屏查看大图(可以缩放)
  13. xbox360fsd更新游戏封面_xbox360自制系统fsd更新封面教程
  14. Win10操作系统下,如何确定电脑位数(图文教程)
  15. 新建 umi 项目,Error: Rendered more hooks 或者 Rendered fewer hooks
  16. 别再说不会分析多选题了!这6种方法解决你的烦恼!
  17. 面对新的挑战,成为更好的自己--进击的技术er
  18. PawningShop:一种NFT抵押借贷的实现
  19. python四级是什么水平_英语四级相当于什么水平?
  20. 亚马逊运营知识:亚马逊排名规则是怎么样的

热门文章

  1. vue+node前后端分离接口调用(初学者)
  2. java的整数扩展,浮点数扩展,字符扩展,转义字符,布尔值扩展
  3. Android 控件 - TextView
  4. mongodb java spring_[Java教程]Spring 与 mongoDB 整合
  5. python3前面加b_Python3 字符串前面加u,r,b的含义
  6. Python 线程条件变量 Condition - Python零基础入门教程
  7. java定时器 并发_【java多线程与并发库】— 定时器的应用 | 学步园
  8. background的用法css,关于CSSbackground的使用方法
  9. python可以构建sem模型_python-分组的熊猫DataFrames:如何将scipy.stats.sem应用于它们?...
  10. 征途2无法显示服务器列表,解决win10系统玩征途2提示“DriverCommlnit驱动加载失败”的方法...