如果文档不存在,则无需创建即可完全更新文档



在弹性搜索中是否有任何方法可以完全(而不是部分)更新文档,而不创建新文档,以防文档不存在?

到目前为止,我发现_update方法在json请求体中传递doc属性以部分更新文档,但是,在这种情况下,我希望替换整个文档,而不仅仅是部分文档。

我还发现,index方法(其中发送PUT请求)运行良好,尽管在id尚未索引的情况下创建了一个新文档。

op_type参数设置为create将强制文档创建而不是更新。我想知道是否有任何方法可以始终强制执行update,而从不使用新的create

或者,也许还有其他方法可以让我完成这样的任务?

如果我理解正确,你想索引一个文档,但前提是它已经存在?像updateop_type选项?

考虑到映射保持一致,您基本上可以使用更新API来完成此操作。使用_update,如果文档不存在,您将得到一个404。如果它确实存在,ES将把doc的内容与那里存在的任何文档合并。如果你确保你发送了一个包含映射中所有字段的新文档,那么你实际上是在彻底替换它。

但是,请注意,您可以在不需要文档合并的情况下在两个请求中高效地执行此操作;第一个是用CCD_ 15请求来检查文档是否存在。如果HEAD /idx/type/id成功,则执行PUT。这基本上就是API更新的内部情况,只需要一点额外的开销。但HEAD确实很便宜,因为它不会打乱任何有效载荷。它只是返回一个HTTP200/404。

相关内容

  • 没有找到相关文章

最新更新