elasticsearch批量操作bulk

作者: 鲁智深 分类: java 发布时间: 2018-05-12 02:54

批量导入合并多个操作,比如index,delete,update,create等等,bulk会把将要处理的数据载入内存中,所以数据量是有限制的,最佳的数据量不是一个确定的数值,它取决于你的硬件,你的文档大小以及复杂性,你的索引以及搜索的负载。

bulk的语法格式是:

action and meta_data \n

optional source \n

action and meta_data \n

optional source \n

action and meta_data \n

optional source \n
……..

文档用法

文档用法

从上面能够看到,两行数据构成了一次操作,第一行是操作类型可以index,create,update,或者delete,第二行就是我们的可选的数据体,使用这种方式批量插入的时候,我们需要设置的它的Content-Type为application/json。

举个例子,这是一条数据

一条数据

数据格式

实战一下,加上id和不加上id,post多条数据,这里要注意的数据格式是2行,上面也提到了,必须这么写,否则或报错。

1
2
3
4
5
6
7
8
9
10
11
POST _bulk
{"index":{"_index":"testdb","_type":"shuju","_id":"5"}}
{"title":"5"}
{"index":{"_index":"testdb","_type":"shuju","_id":"6"}}
{"title":"6"}

POST _bulk
{"index":{"_index":"testdb","_type":"shuju"}}
{"title":"7"}
{"index":{"_index":"testdb","_type":"shuju"}}
{"title":"8"}

更多类似的数据实例:

1
2
3
4
5
6
7
8
POST _bulk
{"index":{"_index":"testdb","_type":"shuju","_id":"5"}}
{"title":"5"}
{"create":{"_index":"testdb","_type":"shuju","_id":"6"}}
{"title":"6"}
{"delete":{"_index":"testdb","_type":"shuju","_id":"5"}}}
{"update":{"_index":"testdb","_type":"shuju"}}
{"doc":{"title":"8"}}

针对不同的操作类型,第二行里面的可选的数据体是不一样的,如下:

(1)index 和 create 第二行是source数据体

(2)delete没有第二行

(3)update 第二行可以是partial doc,upsert或者是script

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表评论

电子邮件地址不会被公开。 必填项已用*标注