簡體   English   中英

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

[英]How to bulk update a field in elasticsearch?

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)

我想批量更新不同文檔的答案字段。 我猜無法以正確的格式發送請求。

批量數據集應該是這樣的,

{'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 而不進行解析。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM