如何在elasticsearch中批量更新字段?

2024-10-03 21:34:19 发布

您现在位置:Python中文网/ 问答频道 /正文

def update(index):
    index = "twitter"
    list = ['0oPwSm4BxbPrifDrF7C1', 'r4MOWm4BxbPrifDrjbgR', 'y4NbWm4BxbPrifDrLLhh']
    data  = []
    for i in list:
        d = { "update" : {"_id" : i, "_index" : index, "retry_on_conflict" : 3} }
        e = { "doc" : {"answer_1" : "test"} }
        data.append(json.dumps(d))
        data.append(json.dumps(e))
    v = "\n".join(data)
    response = requests.post('https://url/_bulk', headers='application/x-ndjson', 
    data=json.loads(v)

我想批量更新不同文档的答案字段。我想无法以正确的格式发送请求


Tags: inidjsonfordataindexdefupdate
2条回答

批量数据集应该是这样的

{'index': ''}\n
{'your': 'data'}\n
{'index': ''}\n
{'other': 'data'}\n

注意:新行,即使是最后一行

我觉得你现有的数据还可以

{"update": {"_id": "0oPwSm4BxbPrifDrF7C1", "retry_on_conflict": 3, "_index": "twitter"}}
{"doc": {"answer_1": "test"}}
{"update": {"_id": "r4MOWm4BxbPrifDrjbgR", "retry_on_conflict": 3, "_index": "twitter"}}
{"doc": {"answer_1": "test"}}
{"update": {"_id": "y4NbWm4BxbPrifDrLLhh", "retry_on_conflict": 3, "_index": "twitter"}}
{"doc": {"answer_1": "test"}}

您在request.post()上遇到语法错误,您错过了结尾括号),需要直接发送v,而不使用额外的json.loads(v)

response = requests.post('https://url/_bulk', 
                         data=v,
                         headers={'content-type':'application/json', 
                         'charset':'UTF-8'})
print(response)

这似乎就是问题所在

data=json.loads(v)

“v”不包含可解析的json字符串,它包含多个用新行分隔的json文档。尝试直接发送v而不进行解析

相关问题 更多 >