Elasticsearch-py объемный помощник эквивалент curl с файлом
Я ищу, чтобы повторить следующую команду с помощью Python-клиента asticsearch (и без использования 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
, looks a bit like this:
{"index":{"_type":"someType","_id":"123"}}
{"field1":"data","field2":"data",...}
{"index":{"_type":"someType","_id":"456"}}
{"field1":"data","field2":"data",...}
...
Please note, I'd rather not change the contents of the file since I have around 21000 with the same format.
1 ответ
actions
Параметр должен принимать итерируемое (не дескриптор файла), которое будет перебирать строки вашего файла, поэтому вам нужно сделать это следующим образом:
es = Elasticsearch()
def readbulk():
for line in open("file"):
yield line
bulk(
client=es,
index="index_name",
actions=readbulk
)