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
)
Другие вопросы по тегам