57

我正在使用Elasticsearch Bulk API创建或更新文档。

我确实知道它们是创建还是更新,但我可以通过将它们全部制作index或 SQL 意义上的“upserts”来简化我的代码。

与使用更明确的and相比,使用index(并让 ES 弄清楚)有什么缺点吗?createupdate

4

3 回答 3

89

如果您要发送create,则必须确保该文档尚不存在于您的索引中,否则调用将失败,而发送相同的文档index将始终成功。

然后,如果出于性能原因,您知道将创建一个文档(使用createor index),然后您只会更新几个属性,那么使用update可能是有意义的。

否则,如果您总是发送完整index的文档,我会一直使用它来创建和更新。每当它看到一个index动作时,如果文档不存在,ES 将创建该文档,如果存在则替换它,但调用将始终成功。

于 2016-01-03T04:48:01.553 回答
7

简短的回答:不,没有缺点。

创建和更新端点是特殊情况。使用 create 如果文档已经存在,您什么也不想做。通过更新,如果您没有文档的所有数据,您可以提供更少的数据,您可以添加一些字段。您还可以确保仅在文档已经存在更新的情况下才对文档进行索引。

于 2016-01-03T08:51:38.777 回答
4

您将无法对所有内容都使用索引。根据文档

index 将根据需要添加或替换文档

此外,如果您要更新文档,添加 'doc_as_upsert' 标志可能是值得的。更多信息在这里这里

于 2016-01-03T03:19:09.020 回答