Elasticsearch的bulk批量增删改查

1、基础语法
每一个操作都要两个json串,语法如下

PUT /_bulk
{“action” : {“metadata”}}
{“data”}
2、举例
比如你现在要创建一个文档,放bulk里

PUT /_bulk
{“index” : {"_index" : “test_index”, “_type” : “test_type”, “_id” : “1”}}
{“test_field1” : “test1”, “test_field2” : “test2”}
3、有哪些类型的操作可以执行呢?
(1)delete:删除一个文档,只要1个json串就可以了,无需{“data”}部分
(2)create:PUT /index/type/id/_create,强制创建
(3)index:普通的PUT操作,可以是创建文档,也可以是全量替换
(4)update:执行的partial update操作

4、注意
bulk api对json语法有严格的要求,每个json串不能换行,只能放到一行,同时一个json串和一个json串之间必须要换行,否则会出现如下错误

{
“error”: {
“root_cause”: [
{
“type”: “json_e_o_f_exception”,
“reason”: “Unexpected end-of-input: expected close marker for Object (start marker at [Source: org.elasticsearch.transport.netty4.ByteBufStreamInput@5a5932cd; line: 1, column: 1])\n at [Source: org.elasticsearch.transport.netty4.ByteBufStreamInput@5a5932cd; line: 1, column: 3]”
}
],
“type”: “json_e_o_f_exception”,
“reason”: “Unexpected end-of-input: expected close marker for Object (start marker at [Source: org.elasticsearch.transport.netty4.ByteBufStreamInput@5a5932cd; line: 1, column: 1])\n at [Source: org.elasticsearch.transport.netty4.ByteBufStreamInput@5a5932cd; line: 1, column: 3]”
},
“status”: 500
}
5、实战演练

POST /_bulk
{ “delete”: { “_index”: “test_index”, “_type”: “test_type”, “_id”: “3” }}
{ “create”: { “_index”: “test_index”, “_type”: “test_type”, “_id”: “12” }}
{ “test_field”: “test12” }
{ “index”: { “_index”: “test_index”, “_type”: “test_type”, “_id”: “2” }}
{ “test_field”: “replaced test2” }
{ “update”: { “_index”: “test_index”, “_type”: “test_type”, “_id”: “1”, “_retry_on_conflict” : 3} }
{ “doc” : {“test_field2” : “bulk test1”} }
bulk操作中,任意一个操作失败,是不会影响到其他操作的,但是再返回结果里,会告诉你异常日志。

如果属于同一个index,不同type的

POST /test_index/_bulk
{ “delete”: { “_type”: “test_type”, “_id”: “3” }}
{ “create”: { “_type”: “test_type”, “_id”: “12” }}
{ “test_field”: “test12” }
{ “index”: { “_type”: “test_type” }}
{ “test_field”: “auto-generate id test” }
{ “index”: { “_type”: “test_type”, “_id”: “2” }}
{ “test_field”: “replaced test2” }
{ “update”: { “_type”: “test_type”, “_id”: “1”, “_retry_on_conflict” : 3} }
{ “doc” : {“test_field2” : “bulk test1”} }
如果index和type都相同

POST /test_index/test_type/_bulk
{ “delete”: { “_id”: “3” }}
{ “create”: { “_id”: “12” }}
{ “test_field”: “test12” }
{ “index”: { }}
{ “test_field”: “auto-generate id test” }
{ “index”: { “_id”: “2” }}
{ “test_field”: “replaced test2” }
{ “update”: { “_id”: “1”, “_retry_on_conflict” : 3} }
{ “doc” : {“test_field2” : “bulk test1”} }
6、bulk size最佳大小
bulk request会加载到内存里,如果太大的话,性能反而会下降,因此需要反复尝试一个最佳的bulk size。一般从10005000条数据开始,尝试逐渐增加,另外,如果看大小的话,最好是在515MB之间。

你可能感兴趣的:(Docker)