完全更新文档而不创建(如果不存在)

时间:2014-08-31 11:21:49

标签: elasticsearch updates put nosql

对于完全(非部分)更新文档,是否有任何弹性搜索方法,如果文档尚不存在,则不创建新文档?

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

我还发现,发送index请求的PUT方法工作正常,但在id尚未编入索引的情况下创建新文档。

op_type参数设置为create将强制创建文档而不是更新。 我想知道是否有任何方法可以始终强制update而不是create新的?{/ p>

或许还有另一种方法可以让我实现这样的任务吗?

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您希望索引文档,但前提是它已存在?就像op_type的{​​{1}}选项一样?

考虑到您的映射保持一致,您可以使用更新API。使用update,如果文档不存在,您将获得_update。如果它确实存在,ES将合并404的内容与那里存在的任何文档。如果您确定要通过映射中的所有字段发送新文档,那么您可以直接替换它。

但请注意,您可以在两个请求中相当有效地合并文档时执行此操作;第一个用doc请求检查doc存在。如果HEAD成功,请执行HEAD /idx/type/id。这基本上是使用更新API在内部发生的事情,只需要额外的开销。但是PUT真的很便宜,因为它并没有改变周围的任何有效载荷。它只返回一个HTTP 200/404。