bulk有哪些类型的操作可以执行呢?
# 1.bulk的语法是怎样的呢?
每一个操作要两个json串,语法如下:
{"action": {"metadata"}}
{"data"}
# 2.bulk的操作有以下几种
(1)delete:删除一个文档,只要1个json串就可以了
(2)create:PUT /index/type/id/_create,强制创建
(3)index:普通的put操作,可以是创建文档,也可以是全量替换文档
(4)update:执行的partial update操作
`tips`:
bulk api对json的语法,有严格的要求,每个json串不能换行,只能放一行,同时一个json串和一个json串之间,必须有一个换行
基于python实现批量增删改查操作
from elasticsearch import Elasticsearch
from elasticsearch import helpers
es = Elasticsearch(hosts="ip:port")
bulk_list = [
{
'_op_type': 'delete',
'_index': 'test_index',
'_type': 'test_type',
'_id': 3,
},
{
'_op_type': 'create',
'_index': 'test_index',
'_type': 'test_type',
'_id': 12,
"_source": {"test_field": "test12"}
},
{
'_op_type': 'index',
'_index': 'test_index',
'_type': 'test_type',
'_id': 2,
"_source": {"test_field": "replaced test2"}
},
{
'_op_type': 'update',
'_index': 'test_index',
'_type': 'test_type',
'_id': 1,
"_retry_on_conflict": 3,
"doc": {"test_field2": "bulk test1"}
}
]
result = helpers.bulk(es, bulk_list)
print(result)
# 返回结果如下,表示4条语句执行成功
"""
(4, [])
"""
基于kibana实现批量增删改查操作
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"} }
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"} }
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"} }
"""
bulk操作中,任意一个操作失败,是不会影响其他的操作的,但是在返回结果里,会告诉你异常日志
"""