为了实现多个文档的create,index,update或delete
请求体格式
action表示行为\n
表示每一行结束都要换行
功能:
- delete:删除一个文档,只要1个json串就可以了 删除的批量操作不需要请求体
- create:相当于强制创建 PUT /index/type/id/_create
- index:普通的put操作,可以是创建文档,也可以是全量替换文档
- update:执行的是局部更新partial update操作
格式:每个json不能换行。相邻json必须换行。
隔离:每个操作互不影响。操作失败的行会返回其失败信息。
为什么要这样写?
因为es数据要分片,如果不换行,他要区分数据在那里,会花费大量时间
# 多重模式
# 批量操作
POST /library/books/_bulk
{ "index": {"_id": 1}}
{ "title": "es-id-1","price":1}
{ "index": {"_id": 2}}
{ "title": "es-id-2","price":2}
{ "index": {"_id": 3}}
{ "title": "es-id-3","price":3}
# 当然还有delete,update等操作
# 注意delete下面没有具体的
POST /library/books/_bulk
{ "delete": {"_index":"library", "_type":"book", "_id":1}}
{ "create": {"_index":"music", "_type": "classical", "_id":1}}
{ "title": "Ave verum corpus"}
{ "index": {"_index": "music", "_type": "classical"}}
{ "title": "Litaniac de Venerabili Altaris Sacroments"}
{ "update": {"_index": "library", "_type": "books", "_id": "2"}}
{"doc":{"price":"18"}}
{ "index": {"_index": "music", "_type": "classical"}}
这个也是新增,只是没有给id,es会给他序列化的id的
bulk处理文档大小的最佳值
- 数据加载在每个节点里的RAM里
- 请求的数据超过一定的大小,那bulk的处理性能就会降低
- 文档数据大小跟硬件配置,文档复杂度,以及当前集群的负载有关
bulk请求一次不要太大,否则一下积压到内存中,性能会下降。所以,一次请求几千个操 作、大小在几M正好.
一般建议是1000-5000个文档,大小建议是5-15MB,默认不能超过100M,可以在es的配置文件(ES的 config下的elasticsearch.yml)中配置.http.max_content_length: 10mb