Elasticsearch系统学习(九)-批量操作
一、批量查询
1.1、批量查询的好处
单次查询:查询100条数据,那么就要发送100次网络请求,网络开销大
批量查询:查询100条数据,就只要发送1次网络请求,网络请求的性能开销缩减100倍
1.2、mget使用
1)一条一条的查询
GET /test_index/test_type/1 GET /test_index/test_type/2
2)mget批量查询
GET /_mget { "docs": [ { "_index": "test_index", "_type": "test_type", "_id": 8 }, { "_index": "test_index", "_type": "test_type", "_id": 10 } ] } { "docs": [ { "_index": "test_index", "_type": "test_type", "_id": "8", "_version": 3, "found": true, "_source": { "test_field": "test client 2" } }, { "_index": "test_index", "_type": "test_type", "_id": "10", "_version": 2, "found": true, "_source": { "test_field1": "test1", "test_field2": "updated test2" } } ] }
3)如果查询的document是一个index下的不同type
GET /test_index/_mget { "docs": [ { "_type": "test_type", "_id": 8 }, { "_type": "test_type", "_id": 10 } ] }
4)如果查询的数据都在同一个index下的同一个type下
GET /test_index/test_type/_mget { "ids": [1, 2] }
二、bulk批量增删改
2.1、bulk语法
每一个操作要两个json串,语法如下:
{"action": {"metadata"}} {"data"}
比如创建一个文档:
{"index": {"_index": "test_index", "_type", "test_type", "_id": "1"}} {"test_field1": "test1", "test_field2": "test2"}
2.2、bulk支持的操作类型
(1)delete:删除一个文档,只要1个json串就可以了
(2)create:PUT /index/type/id/_create,强制创建
(3)index:普通的put操作,可以是创建文档,也可以是全量替换文档
(4)update:执行的partial update操作
注意:
1)bulk api对json的语法,有严格的要求,每个json串不能换行,只能放一行,同时一个json串和一个json串之间,必须有一个换行
2)bulk操作中,任意一个操作失败,是不会影响其他的操作的,但是在返回结果里,会告诉你异常日志
2.3、bulk操作
POST /_bulk { "delete": { "_index": "test_index", "_type": "test_type", "_id": "3" }} { "create": { "_index": "test_index", "_type": "test_type", "_id": "12" }} #当document存在时会报错 { "test_field": "test12" } { "index": { "_index": "test_index", "_type": "test_type", "_id": "2" }} { "test_field": "replaced test2" } { "update": { "_index": "test_index", "_type": "test_type", "_id": "1", "_retry_on_conflict" : 3} } { "doc" : {"test_field2" : "bulk test1"} } POST /test_index/_bulk { "delete": { "_type": "test_type", "_id": "3" }} { "create": { "_type": "test_type", "_id": "12" }} { "test_field": "test12" } { "index": { "_type": "test_type" }} { "test_field": "auto-generate id test" } { "index": { "_type": "test_type", "_id": "2" }} { "test_field": "replaced test2" } { "update": { "_type": "test_type", "_id": "1", "_retry_on_conflict" : 3} } { "doc" : {"test_field2" : "bulk test1"} } POST /test_index/test_type/_bulk { "delete": { "_id": "3" }} { "create": { "_id": "12" }} { "test_field": "test12" } { "index": { }} { "test_field": "auto-generate id test" } { "index": { "_id": "2" }} { "test_field": "replaced test2" } { "update": { "_id": "1", "_retry_on_conflict" : 3} } { "doc" : {"test_field2" : "bulk test1"} }
2.4、bulk size最佳大小
bulk request会加载到内存里,如果太大的话,性能反而会下降,因此需要反复尝试一个最佳的bulk size。一般从1000~5000条数据开始,尝试逐渐增加。另外,如果看大小的话,最好是在5~15MB之间。
作者:Lawrence
-------------------------------------------
个性签名:独学而无友,则孤陋而寡闻。做一个灵魂有趣的人!
扫描上面二维码关注我
如果你真心觉得文章写得不错,而且对你有所帮助,那就不妨帮忙“推荐"一下,您的“推荐”和”打赏“将是我最大的写作动力!
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接.