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操作
- bulk api对json的语法,有严格的要求,每个json串不能换行,只能放一行,同时一个json串和一个json串之间,必须有一个换行
- 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的关系型数据库,更加合适一些。无论是性能,还是吞吐量,可能都会更好。