Elasticsearch批量API - 索引与创建/更新

时间:2016-01-03 02:55:11

标签: elasticsearch elasticsearch-bulk

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

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

使用index(并让ES弄明白)使用更明确的createupdate是否有任何不利之处?

3 个答案:

答案 0 :(得分:57)

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

然后,如果由于性能原因,您知道您将创建一个文档(使用createindex)然后您只更新一些属性,然后使用{{1可能有意义。

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

答案 1 :(得分:8)

答案简短:没有不利条件。

创建和更新端点是特殊情况。使用create,如果文档已经存在,则您无需执行任何操作。如果您没有文档的所有数据,只需添加一些字段,通过更新,您可以提供更少的数据。您还可以确保文档仅在已经存在更新的情况下编制索引。

答案 2 :(得分:4)

您无法为所有内容使用索引。根据{{​​3}}:

  

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

此外,如果要更新文档,则可能需要添加“doc_as_upsert”标志。更多信息docshere