ElasticSearch批量操作中,除了批量读,还包括了批量写操作。通过批量写操作,也可以快速来处理多次的写请求,将请求合并,提高多次写的性能。
温馨提示:本博客已经发布小程序,可在微信小程序中搜索”百变码农”,手机上也能看!
1.bulk基本语法
除了delete操作之外,每一个bulk操作需要两条json命令,如下:
{"operation": {"metadata"}} {"data"}
2.常见操作
2.1 文档删除
POST /_bulk { "delete": { "_index":"test_index", "_type":"test_type", "_id":3 } }
上出操作会提示如下的异常:
{ "error": { "root_cause": [ { "type": "json_e_o_f_exception", "reason": "Unexpected end-of-input: expected close marker for Object (start marker at [Source: org.elasticsearch.transport.netty4.ByteBufStreamInput@624953fa; line: 1, column: 1])\n at [Source: org.elasticsearch.transport.netty4.ByteBufStreamInput@624953fa; line: 2, column: 3]" } ], "type": "json_e_o_f_exception", "reason": "Unexpected end-of-input: expected close marker for Object (start marker at [Source: org.elasticsearch.transport.netty4.ByteBufStreamInput@624953fa; line: 1, column: 1])\n at [Source: org.elasticsearch.transport.netty4.ByteBufStreamInput@624953fa; line: 2, column: 3]" }, "status": 500 }
异常原因:bulk相关api操作时,json命令不能换行,一个json串只能放在一行中。而且不通的json命令需要在不同行中.
去掉换行,改为如下命令即可:
{"delete": {"_index":"test_index","_type":"test_type","_id":3}}
2.2 文档创建
POST /_bulk {"create":{"_index":"test_index","_type":"test_type","_id":1}} {"name1":"wangbin","name2":"binwang"}
2.3 文档创建或者全量替换
全量替换,没指定的字段将会被删除掉:
POST /_bulk {"index":{"_index":"test_index","_type":"test_type","_id":1}} {"name1":"wangbin3"}
创建,文档不存在将会创建文档:
{"index":{"_index":"test_index","_type":"test_type","_id":20}} {"name1":"bingbingbing"}
2.4 文档更新(partial update),只会更新某一个字段
POST /_bulk {"update":{"_index":"test_index","_type":"test_type","_id":1}} {"doc":{"name2":"binwang3"}}
注意:在bulk的一些列操作中,如果其中有一条操作失败,是不影响其他操作的,失败的操作会在返回结果中输出错误日志信息。
3.bulk的性能优化
(1)bulk request会被提前加载到内存中,如果一次bulk操作过多的话,性能反而会下降,所以需要尝试去找到一个最佳的bulk size,并不是越多越好。
(2)bulk size建议从1000条数据开始往上尝试;
(3)如果是数据大小,建议从5M开始往上尝试。
至此,ElasticSearch的bulk操作api及用法介绍完毕,欢迎转发!如果小程序端代码显示混乱,是因为移动端兼容性导致,可移步至PC端站点查看!
注意:文章属于原创,如果转发请标注文章来源:个人小站【www.jinnianshizhunian.vip】
另外提供一些优秀的Java架构师及IT开发视频,书籍资料。无需注册,无需登录即可下载,免费下载地址:https://www.592xuexi.com
Pingback: ElasticSearch的bulk操作性能高的原理 – 个人小站-记录编程知识