如何从python中对elasticsearch进行批量索引

时间:2017-08-23 05:59:08

标签: python json elasticsearch elasticsearch-bulk-api

我有近10K的json文档,我想通过使用python中的elasticsearch bulk api将所有这些文档推送到elasticsearch。 我浏览了一些文档,但没有得到任何解决方案。

result=es.bulk(index="index1", doc_type="index123", body=jsonvalue)
helpers.bulk(es,doc) 

我试过了两次但没有结果,我收到了这个错误

elasticsearch.exceptions.RequestError: TransportError(400, u'illegal_argument_exception', u'Malformed action/metadata line [1], expected START_OBJECT or END_OBJECT but found [VALUE_STRING]')

请帮帮我

1 个答案:

答案 0 :(得分:4)

我更喜欢使用helpers模块中的批量方法进行批量索引。请尝试以下方法:

from elasticsearch import helpers
res = helpers.bulk(es, jsonvalue, chunk_size=1000, request_timeout=200)

您的jsonvalue需要遵循特定格式。它必须是10K json文档的列表,每个文档都包含以下字段:

doc = {
    '_index': 'your-index',
    '_type': 'your-type',
    '_id': 'your-id',
    'field_1': 'value_1',
    ...
}

所以你的最终 jsonvalue 看起来像这样:

jsonvalue = [
    {
    '_index': 'your-index',
    '_type': 'your-type',
    '_id': 'your-id',
    'field_1': 'value_1',
    ...
},
    {
    '_index': 'your-index',
    '_type': 'your-type',
    '_id': 'your-id',
    'field_1': 'value_2',
    ...
},
    {
    '_index': 'your-index',
    '_type': 'your-type',
    '_id': 'your-id',
    'field_1': 'value_3',
    ...
}
]