对于Elasticsearch,有没有什么方法可以完全(而不是部分)更新文档,并且在不存在的情况下不创建新文档?
到目前为止,我发现该_update
方法doc
在将json请求主体内的属性传递给部分更新文档的同时,在这种情况下,我想替换整个文档,而不仅仅是部分替换。
我还发现,index
发送PUT
请求的方法可以正常工作,尽管在id
尚未建立索引的情况下创建新文档。
将op_type
参数设置为create
将强制执行文档创建,而不是更新。我想知道是否有任何方法可以始终执行,update
而从来没有create
新方法?
也许还有另一种方法可以让我完成这样的任务?
如果我理解正确,您想为文档建立索引,但前提是该文档已经存在?喜欢的op_type
选择update
?
假设您的映射保持一致,则大多数情况下都可以使用update API来完成。使用_update
,如果文档不存在,则会返回404
。如果确实存在,ES将合并doc
其中的任何文档的内容。如果您确定要通过映射中的所有字段发送新文档,那么就可以有效地完全替换它。
但是请注意,您可以在两个请求中都不会非常有效地合并文档的情况下完成此操作。第一个通过HEAD
请求检查文档是否存在。如果HEAD /idx/type/id
成功,则执行PUT
。无论如何,这本质上就是使用更新API内部发生的事情,但有一些额外的开销。但是HEAD
确实很便宜,因为它不会拖曳任何有效负载。它只是返回HTTP 200/404。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句