Elasticsearch Bulk API 批量增删改查
Elasticsearch 中有了批量查询 mget,当然也要有 mset ——只有程序员才能想到的冷笑话,正确答案是用 Bulk API 实现批量增删改查。文字内容整理自 B 站中华石杉的 Elasticsearch 顶尖高手系列课程核心知识篇
Bulk 语法
先实操一下
每一个操作要两个 json 串,语法如下:
举例,比如你现在要创建一个文档,放 bulk 里面,看起来会是这样子的:
也可以指定操作一个某索引
有哪些类型的操作可以执行呢?
delete:删除一个文档,只要 1 个 json 串就可以了
create:类似于 PUT /index/_doc/id/_create,强制创建
index:普通的 put 操作,可以是创建文档,也可以是全量替换文档
update:执行的 partial update 操作
bulk api 对 JSON 的语法,有严格的要求,每个 JSON 串不能换行,只能放一行,同时一个 JSON 串和一个 JSON 串之间,必须有一个换行,否则就会看到如下报错信息:
官方文档上的解释:
The actions are specified in the request body using a newline delimited JSON (NDJSON) structure:
create fails if a document with the same ID already exists in the target, index adds or replaces a document as necessary.
bulk 操作中,任意一个操作失败,是不会影响其他的操作的,但是在返回结果里,会告诉你异常日志。
重复执行之前的 bulk 语句,会发现
result: not_found; status: 404,之前已经被删除了
status: 409,create 之前已经创建过,version conflict
status: 404,没有找到要更新的文档,document missing
如果执行顺利的化,可以看到的 result 就是:deleted、created、updated,而 status 是:200 或 201
Bulk 最佳大小
bulk request 会加载到内存里,如果太大的话,性能反而会下降,因此需要反复尝试一个最佳的 bulk size。一般从 1000~5000 条数据开始,尝试逐渐增加。另外,如果看大小的话,最好是在 5~15 MB 之间。
版权声明: 本文为 InfoQ 作者【escray】的原创文章。
原文链接:【http://xie.infoq.cn/article/1e497c40c46c91dca9ef32e1e】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论