Python Elasticsearch:条件批量更新插入

问题描述

使用 python 库,我尝试对 Elasticsearch 索引执行以下操作:

我正在使用 batch API 从几个不同的来源收集文档。甚至可能在一个批次内,某些文档可能会被分配相同的 id,并且在某些情况下应该替换具有相同 id 的现有文档。

出于某种原因,似乎无法检查较低版本或seq_no,而只能检查具体值。然而,在我的情况下,这已经足够了,幸运的是我只有两个案例。

因此,如果我发现某个文档具有更高的优先级,我想在批处理正文中为其分配 _seq_no:1,否则为 0 并在批处理正文中添加 _if_seq_no:0

_body = { '_op_type':   'update','_if_seq_no': 0,'_index':     INDEX,'_id':        None,'_seq_no':    None,'_source':    {'doc': { ... } }
        }

在提供批量更新的生成器中,我替换了 _body['_id']_body['_seq_no']

这是我如何解决问题的想法,尤其是在阅读this recent unresolved discussion之后。

但是,此时我收到以下错误

raise HTTP_EXCEPTIONS.get(status_code,TransportError)(elasticsearch.exceptions.RequestError: RequestError(400,'action_request_validation_exception','Validation Failed: 1: ifSeqNo is set,but primary term is [0];2: ifSeqNo is set,but primary term is [0];3: ifSeqNo is set,but primary term is [0];4: ifSeqNo is set,but primar...

我是否遵循了明智的方法,您是否有关于如何完成它的建议?

顺便说一下,如果不存在具有相应 ID 的文档,update 是否有效?在我使用 create 之前,它显示 create operations do not support compare and set. use index instead

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)