我正在使用Elasticsearch Bulk API来创建或更新文档。
我确实知道它们是创建还是更新,但我可以通过在SQL意义上将它们全部index
或“upserts”简化来简化我的代码。
使用index
(并让ES弄明白)使用更明确的create
和update
是否有任何不利之处?
答案 0 :(得分:57)
如果您要发送create
,则必须确保索引中的文档尚不存在,否则调用将失败,而使用index
发送同一文档将始终成功。< / p>
然后,如果由于性能原因,您知道您将创建一个文档(使用create
或index
)然后您只更新一些属性,然后使用{{1可能有意义。
否则,如果您总是发送完整文档,我会一直使用update
来创建和更新。每当它看到index
动作时,如果文档不存在,ES将创建文档,如果文档存在则替换它,但是调用将始终成功。
答案 1 :(得分:8)
答案简短:没有不利条件。
创建和更新端点是特殊情况。使用create,如果文档已经存在,则您无需执行任何操作。如果您没有文档的所有数据,只需添加一些字段,通过更新,您可以提供更少的数据。您还可以确保文档仅在已经存在更新的情况下编制索引。
答案 2 :(得分:4)