Elasticsearch-py批量助手相当于curl与文件

时间:2017-09-11 21:49:44

标签: python-3.x curl elasticsearch elasticsearch-py elasticsearch-bulk-api

我希望使用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左右。

1 个答案:

答案 0 :(得分:0)

actions参数必须采用迭代(不是文件句柄)来迭代文件行,所以你需要这样做:

es = Elasticsearch()

def readbulk():
    for line in open("file"):
        yield line

bulk(
    client=es,
    index="index_name",
    actions=readbulk
)