ElasticSearch 文档的增删改查都不会?

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

咱们先来看下这个表:网络

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

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

再简单了解了 CURD 操做的 HTTP 请求后,那么让咱们先来了解下如何建立文档:函数

建立文档

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

本身指定文档 id建立文档,须要考虑 id 的均衡性,避免产生分配不均衡的问题。 ES 的 hash 函数会确保文档 id 被均匀分配到不一样的分片。性能

当咱们执行刚才的命令,能够返回以下结果:ui

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

建立文档时,若是索引不存在,ES 会自动建立对应的 index 和 type。code

接下来看下另外一种建立文档的方式,不指定 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

相关文章
相关标签/搜索