对于完全(非部分)更新文档,是否有任何弹性搜索方法,如果文档尚不存在,则不创建新文档?
到目前为止,我发现_update
方法在json请求体内传递doc
属性以部分更新文档时,我想在这种情况下替换整个文档,不仅仅是部分。
我还发现,发送index
请求的PUT
方法工作正常,但在id
尚未编入索引的情况下创建新文档。
将op_type
参数设置为create
将强制创建文档而不是更新。
我想知道是否有任何方法可以始终强制update
而不是create
新的?{/ p>
或许还有另一种方法可以让我实现这样的任务吗?
答案 0 :(得分:0)
如果我理解正确,您希望索引文档,但前提是它已存在?就像op_type
的{{1}}选项一样?
考虑到您的映射保持一致,您可以使用更新API。使用update
,如果文档不存在,您将获得_update
。如果它确实存在,ES将合并404
的内容与那里存在的任何文档。如果您确定要通过映射中的所有字段发送新文档,那么您可以直接替换它。
但请注意,您可以在两个请求中相当有效地合并文档时执行此操作;第一个用doc
请求检查doc存在。如果HEAD
成功,请执行HEAD /idx/type/id
。这基本上是使用更新API在内部发生的事情,只需要额外的开销。但是PUT
真的很便宜,因为它并没有改变周围的任何有效载荷。它只返回一个HTTP 200/404。