python如何使用_bulk指令向es服务器发送post请求创建和更新
在Elasticsearch中,_bulk指令用于批量添加、更新或删除文档。这个指令允许用户在一个请求中提交多个操作。
POST /my_index/_bulk
{"index":{"_id":"1"}}
{"item":"apple"}
{"index":{"_id":"2"}}
{"item":"banana"}
每两行为一个完整指令,上一行的”index“代表进行新建或更新,”_id“的值代表文档ID;下一行的"item"为文档中的字段。
拼接指令的时候必须要注意{
、}
的个数,每一行必须使用\n
换行符结尾,否则传输错误指令之后会报错。
在Python中使用requests.post方法输出该命令,可以使用如下代码:
import json
import requests
id = 1
item = "apple"
# 第一行指令,字典格式
action = {"index": {"_id": id}}
# 第二行指令,字典格式
data = {"item": item}
# 将字典转化为json格式,并拼接成完整指令,每行指令间用`\n`换行符连接
postdata = json.dumps(action) + "\n" + json.dumps(data) + "\n"
# headers中保存授权信息和格式
headers = {
'Content-Type': 'application/json;charset=UTF-8',
}
# es数据库的地址替换为`http://es.cloud.com/`,索引为`testindex`,`_doc/_bulk`为固定指令代表使用_bulk指令。
url = "http://es.cloud.com/testindex/_doc/_bulk"
response = requests.post(url, headers=headers, data=postdata)
print(response.text)