我希望使用elasticsearch python客户端复制以下命令(并且不使用subprocess
):
curl -s -XPOST "localhost:9200/index_name/_bulk" --data-binary @file
我试图毫无运气地使用批量助手:
es = Elasticsearch()
with open("file") as fp:
bulk(
client=es,
index="index_name",
actions=fp
)
这会导致type is missing
错误。
使用curl
时处理得很好的文件看起来有点像这样:
{"index":{"_type":"someType","_id":"123"}}
{"field1":"data","field2":"data",...}
{"index":{"_type":"someType","_id":"456"}}
{"field1":"data","field2":"data",...}
...
请注意,我不想更改文件的内容,因为我的格式大致为21000左右。
答案 0 :(得分:0)
actions
参数必须采用迭代(不是文件句柄)来迭代文件行,所以你需要这样做:
es = Elasticsearch()
def readbulk():
for line in open("file"):
yield line
bulk(
client=es,
index="index_name",
actions=readbulk
)