python - 等待使用 elasticsearch DSL 完成 UpdateByQuery

标签 python elasticsearch elasticsearch-dsl

我正在使用一个非常大的数据集,我需要清理(删除)某些文档的某些属性,然后立即将此类属性添加到其他文档。有时,具有被删除属性的文档是我应该更新的文档。问题是有时会出现 ConflictError,我想知道如何等待第一个查询完全执行后再执行第二个查询。这是我正在使用的代码:

ubq = UpdateByQuery(using=self.es, index=self.index).update_from_dict(query1).script(source=script_remove_source)
ubq.execute()

ubq = UpdateByQuery(using=self.es, index=self.index).update_from_dict(query2).script(source=script_add_source)
ubq.execute()

任何的想法?

在弹性文档中,他们提到了参数 wait_for_completion ,但它们没有提供使用示例。无论如何,这不是 Elasticsearch DSL。我读了DSL docs但没有提到同步或异步。

我现在正在做的就是在 3 秒之间 sleep ……它确实有效,但这太糟糕了。

提前致谢!

最佳答案

我终于用 retry_on_conflict 管理它:

es.update(
                index=index,
                doc_type=doc_type,
                id=id_str,
                body={"doc": {
                    session: state
                }},
                retry_on_conflict=5
            )

关于python - 等待使用 elasticsearch DSL 完成 UpdateByQuery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56602137/

相关文章:

c# - 如何通过 ModifyJsonSerializerSettings 在 NEST 客户端中设置 NullValueHandling.Include JsonSerializerSettings

elasticsearch - 如何通过AND和OR逻辑(AND内的OR逻辑)的组合定义DSL查询?

python - 为什么当前模块中没有__dict__?

python - python kafka 库的编码/格式问题

python:需要帮助以正确的方式实现 strptime()

python - 如何手动关闭BaseHTTPServer中的连接?

elasticsearch - 如何使用FileBeat将管道分隔格式的日志数据以JSON格式发送到Elasticsearch?

elasticsearch - Elasticsearch使用截止值计算Max

elasticsearch - 如何在Elasticsearch中获得总单词出现次数?

python-2.7 - 使用 elasticsearch-dsl 创建带有 Integer 字段的 DocType 类