elasticsearch - AWS Elasticsearch:使用 Python 请求进行批量插入
问题描述
我有一个索引用户。这些是我的文件:
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]
但我确实用换行符结束它。
解决方案
这有效:
我的第一个字典的格式错误。我还更改了标题,但它似乎也可以与另一个标题一起使用。在 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)
推荐阅读
- kotlin - 使用 Jackson JsonDeserializer 解码自定义对象
- arduino - 如何在使用 wifimanager 库暂时断开连接并且不停止后将 esp32 重新连接到 wifi
- java - log4j Socket Appender 在哪里写入
- firebase - Firebase 云消息发送与接收
- linux - 内核安装错误:写入失败(设备上没有剩余空间)
- javascript - 遍历基于对象的属性路径数组
- xaml - 为什么 BorderColor="White" 在 Xamarin 上不起作用
- google-cloud-dataproc - Knox 进程消耗 Dataproc 主节点中的所有资源
- python - Python JSON 更新未按预期工作
- node.js - 成功部署的应用程序无法访问 POSTGRES - HEROKU