ElasticSearch批量操作之bulk批量增删改

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

1 条思考于 “ElasticSearch批量操作之bulk批量增删改

  1. Pingback: ElasticSearch的bulk操作性能高的原理 – 个人小站-记录编程知识