Для эффективной индексации данных в Elasticsearch я отправляю содержимое через cURL, сначала я пишу командные файлы, а затем отправляю их через массовый API
Но я думаю, что могу избежать записи времени, отправив непосредственносодержимое подпроцесса, например:
jq = Popen("jq -c '. | {\"index\":{}}, . '" , shell=True, stdout=PIPE, stdin=PIPE)
curl = Popen("curl -S -H \"Content-type:application/x-ndjson\" -XPOST localhost:9200/myindex/_bulk/ —data-binary @-" ,
shell=True, stdout=PIPE, stdin=jq.stdout)
for line in fic:
entry = linetoentry(line) # make dict object
jq.stdin.write(json.dumps(entry).encode("utf-8"))
Но я получил erno 32 broken pipe
, я прочитал, что это может быть потому, что второй подпроцесс не читает из первого, поэтому его "полный", этот способ работает длянебольшие входные данные, но не для больших, поэтому они согласованы
Как решить эту проблему?И это хороший способ ввести много много строк в процесс?