【问题标题】:AWS Elasticsearch: bulk insert using Python requestsAWS Elasticsearch:使用 Python 请求进行批量插入
【发布时间】:2020-12-11 22:28:17
【问题描述】:

我有一个索引用户。这些是我的文件:

doc1 = {"user_id":1, "name":"first1 last1"}
doc2 = {"user_id":2, "name":"first2 last2"}

我正在尝试使用 Python 的请求进行批量插入

data_as_str = ""
data_as_str += json.dumps({ "_index": "users"}) + "\n"
data_as_str += json.dumps(doc1) + "\n"
data_as_str += json.dumps({ "_index": "users"}) + "\n"
data_as_str += json.dumps(doc2) + "\n"

headers = {'Content-type': 'application/json', 'Accept': 'text/plain'}

r = requests.post("https://ES_HOST/_bulk", auth=awsauth, headers=headers, data=data_as_str)

我得到的错误是非法参数异常:

格式错误的操作/元数据行 [1],应为 START_OBJECT,但找到了 [START_ARRAY]

我已经尝试将它放在一个列表中并添加额外的换行符等。

编辑:

如果我发送 json 而不是数据:

r = requests.post(bulkurl, auth=awsauth, headers=headers, json=data_as_str)

那么错误是批量请求必须由换行符终止[\n]

但我确实以换行符结束。

【问题讨论】:

标签: elasticsearch aws-elasticsearch


【解决方案1】:

这行得通:

我的第一个字典的格式错误。我还更改了标题,但它似乎也可以与另一个标题一起使用。在 post 请求中发送数据,而不是 json。

data_as_str = ""
data_as_str += json.dumps({"index": {"_index": "users","_id":1}}) + "\n"
data_as_str += json.dumps(doc1) + "\n"
data_as_str += json.dumps({"index": {"_index": "users","_id":2}}) + "\n"
data_as_str += json.dumps(doc2) + "\n"

headers = {'Content-Type': 'application/x-ndjson'}

r = requests.post("https://ES_HOST/_bulk", auth=awsauth, headers=headers, data=data_as_str)

【讨论】:

    猜你喜欢
    • 2012-12-09
    • 1970-01-01
    • 2015-08-18
    • 2020-01-07
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多