ElasticSearch实战笔记

08、mget批量查询,bulk批量语法

2020-03-25  本文已影响0人  众神开挂

主要内容:mget批量查询,bulk批量语法

1、mget批量查询

查询方式01 :不同index下

GET /_mget
{
  "docs": [
    {
      "_index": "ecommerce",
      "_id": 1
    },
    {
      "_index": "test_index",
      "_id": 7
    }
  ]
}

查询方式02:适用于同一个index下

GET /ecommerce/_mget
{
  "docs": [
    {
      "_id": 1
    },
    {
      "_id": 2
    }
  ]
}
##或者下面这种方式
GET /ecommerce/_mget
{
  "ids":["1","2"]
}

可以说mget是很重要的,一般来说,在进行查询的时候,如果一次性要查询多条数据的话,那么一定要用batch批量操作的api,尽可能减少网络开销次数,可能将性能提升数倍,甚至数十倍,非常之重要

2、bulk批量语法

语法说明:

每一个操作要两个json串,语法如下:

{"action": {"metadata"}}
{"data"}

举例,比如你现在要创建一个文档,放bulk里面,看起来会是这样子的:

{"index": {"_index": "test_index", "_type", "test_type", "_id": "1"}}
{"test_field1": "test1", "test_field2": "test2"}

可以执行的操作类型:
(1)delete:删除一个文档,只要1个json串就可以了
(2)create:PUT /index/_create/id,强制创建
(3)index:普通的put操作,可以是创建文档,也可以是全量替换文档
(4)update:执行的partial update操作

  1. bulk api对json的语法,有严格的要求,每个json串不能换行,只能放一行,同时一个json串和一个json串之间,必须有一个换行
  2. bulk操作中,任意一个操作失败,是不会影响其他的操作的,但是在返回结果里,会告诉你异常日志
2.1、删除操作
POST /_bulk
{"delete":{"_index":"ecommerce","_id":"8"}}
2.2、创建操作
POST /_bulk
{"create":{"_index":"ecommerce","_id":"12"}}
{"test_field":"test12"}
2.3、创建或者批量更新
POST /_bulk
{"index":{"_index":"ecommerce","_id":"2"}}
{"test_field":"replaced test2"}
2.4、partial update
POST /_bulk
{"update":{"_index":"ecommerce","_id":"1"}}
{"doc":{"test_field2":"bulk test1"}}
2.5、 并联批量执行
POST /_bulk
{"delete":{"_index":"ecommerce","_id":"8"}}
{"create":{"_index":"ecommerce","_id":"12"}}
{"test_field":"test12"}
{"index":{"_index":"ecommerce","_id":"2"}}
{"test_field":"replaced test2"}
{"update":{"_index":"ecommerce","_id":"1"}}
{"doc":{"test_field2":"bulk test1"}}
2.6、相同index的话
POST ecommerce/_bulk
{"delete":{"_id":"8"}}
{"create":{"_id":"12"}}
{"test_field":"test12"}
{"index":{"_id":"2"}}
{"test_field":"replaced test2"}
{"update":{"_id":"1"}}
{"doc":{"test_field2":"bulk test1"}}

3、bulk size最佳大小

bulk request会加载到内存里,如果太大的话,性能反而会下降,因此需要反复尝试一个最佳的bulk size。一般从10005000条数据开始,尝试逐渐增加。另外,如果看大小的话,最好是在515MB之间。

阶段性总结和梳理


Elasticsearch在跑起来以后,其实起到的第一个最核心的功能,就是一个分布式的文档数据存储系统。
文档数据:es可以存储和操作json文档类型的数据,而且这也是es的核心数据结构。
存储系统:es可以对json文档类型的数据进行存储,查询,创建,更新,删除,等等操作。其实已经起到了一个什么样的效果呢?其实ES满足了这些功能,就可以说已经是一个NoSQL的存储系统了。

围绕着document在操作,其实就是把es当成了一个NoSQL存储引擎,一个可以存储文档类型数据的存储系统,在操作里面的document。

es可以作为一个分布式的文档存储系统,所以说,我们的应用系统,是不是就可以基于这个概念,去进行相关的应用程序的开发了。

适合什么类型的应用程序呢?

(1)数据量较大,es的分布式本质,可以帮助你快速进行扩容,承载大量数据
(2)数据结构灵活多变,随时可能会变化,而且数据结构之间的关系,非常复杂。
(3)对数据的相关操作,较为简单,比如就是一些简单的增删改查
(4)NoSQL数据库,适用的也是类似于上面的这种场景

举个例子,比如说像一些网站系统,或者是普通的电商系统,博客系统,面向对象概念比较复杂,但是作为终端网站来说,没什么太复杂的功能,就是一些简单的CRUD操作,而且数据量可能还比较大。这个时候选用ES这种NoSQL型的数据存储,比传统的复杂的功能务必强大的支持SQL的关系型数据库,更加合适一些。无论是性能,还是吞吐量,可能都会更好。

上一篇下一篇

猜你喜欢

热点阅读