Elasticsearch-批量操作(bulk)

  1. bulk的基础概念
    bulk是es提供的一种批量增删改的操作API。
  2. bulk的语法
    bulk对JSON串的有着严格的要求。每个JSON串不能换行,只能放在同一行,同时,相邻的JSON串之间必须要有换行(Linux下是\n;Window下是\r\n)。bulk的每个操作必须要一对JSON串(delete语法除外)。
POST /_bulk
{ "action": { "metadata" }}\n
{ "data" }\n
{ "action": { "metadata" }}\n
{ "data" }\n
...

eg: 新增11,修改3 删除5

POST /_bulk
{"create": {"_index": "test_index", "_id": 11}}\n
{"test_field": "test_bulk", "counter":"100"}\n
{"update": {"_index": "test_index", "_id": 3}}\n
{"doc": {"test_field": "bulk test"}}\n
{"delete": {"_index": "test_index", "_id": 5}}

bulk的操作类型
create 如果文档不存在就创建,但如果文档存在就返回错误
update 更新一个文档,如果文档不存在就返回错误
delete 删除一个文档,如果要删除的文档id不存在,就返回错误
某一个操作失败,是不会影响其他文档的操作的,它会在返回结果中告诉你失败的详细的原因

bulk这样书写的好处:

  1. bulk中的每个操作都可能要转发到不同的node的shard去执行
  2. 直接按照换行切割json
  3. 对每两个一组的json,渠道meta,进行document路由
  4. 直接将对应的json发送到node上
posted @ 2024-03-20 10:10  py卡卡  阅读(92)  评论(0编辑  收藏  举报