使用python在Elasticseach中批量部分Upsert

时间:2015-12-23 19:38:52

标签: python elasticsearch upsert

我想向ES发送n个upsert部分请求,这样的事情可能吗? 因此,如果文档不存在,请插入我的部分文档。如果它已存在,请使用部分文档更新它。

使用批量助手,我尝试了很多变化,但它们都消除了现有的值,转而支持新的值。

data = [{
    "_index": 'my_index',
    "_type": 'my_type',
    "_id": 12345,
    "doc": {"newkey": 'newvalue'}
}]
helpers.bulk(es, data, index='my_index', doc_type='my_type')

data = [{
    "_index": 'my_index',
    "_type": 'my_type',
    "_id": 12345,
    "_source": {"newkey": 'newvalue'}
}]
helpers.bulk(es, data, index='my_index', doc_type='my_type')

也不起作用。

2 个答案:

答案 0 :(得分:7)

正如J. Ku回答的那样,他给出了正确答案,但提供的代码不完整。所以发布完整的答案。

data = [{
    "_op_type": 'update',
    "_index": 'my_index',
    "_type": 'my_type',
    "_id": 12345,
    "doc": {"newkey": 'newvalue'},
    "doc_as_upsert":True
}]

helpers.bulk(es, data, index='my_index', doc_type='my_type')

答案 1 :(得分:1)

我认为您需要包含documentation中提到的操作并将upsert设置为true

data = [{
    "_op_type": 'update',
    "_index": 'my_index',
    "_type": 'my_type',
    "_id": 12345,
    "doc": {"newkey": 'newvalue'}
}]
helpers.bulk(es, data, index='my_index', doc_type='my_type')