我想向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')
也不起作用。
答案 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')