为了实现多个文档的create,index,update或delete
    请求体格式
    image.png

    action表示行为
    \n表示每一行结束都要换行

    功能:

    • delete:删除一个文档,只要1个json串就可以了 删除的批量操作不需要请求体
    • create:相当于强制创建 PUT /index/type/id/_create
    • index:普通的put操作,可以是创建文档,也可以是全量替换文档
    • update:执行的是局部更新partial update操作

    格式:每个json不能换行。相邻json必须换行。
    隔离:每个操作互不影响。操作失败的行会返回其失败信息。

    为什么要这样写?
    因为es数据要分片,如果不换行,他要区分数据在那里,会花费大量时间

    1. # 多重模式
    2. # 批量操作
    3. POST /library/books/_bulk
    4. { "index": {"_id": 1}}
    5. { "title": "es-id-1","price":1}
    6. { "index": {"_id": 2}}
    7. { "title": "es-id-2","price":2}
    8. { "index": {"_id": 3}}
    9. { "title": "es-id-3","price":3}
    1. # 当然还有delete,update等操作
    2. # 注意delete下面没有具体的
    3. POST /library/books/_bulk
    4. { "delete": {"_index":"library", "_type":"book", "_id":1}}
    5. { "create": {"_index":"music", "_type": "classical", "_id":1}}
    6. { "title": "Ave verum corpus"}
    7. { "index": {"_index": "music", "_type": "classical"}}
    8. { "title": "Litaniac de Venerabili Altaris Sacroments"}
    9. { "update": {"_index": "library", "_type": "books", "_id": "2"}}
    10. {"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