Elasticsearch 批量 API - 索引与 Create/Update
Elasticsearch Bulk API - Index vs Create/Update
我正在使用 Elasticsearch Bulk API 创建或更新文档。
我确实知道它们是创建的还是更新的,但我可以通过将它们全部设为 index
或 "upserts" 的 SQL 意义来简化我的代码。
与使用更明确的 create
和 update
相比,使用 index
(并让 ES 弄明白)有什么缺点吗?
您无法对所有内容使用索引。根据 docs:
index will add or replace a document as necessary
如果您要发送 create
,您必须确保索引中不存在该文档,否则调用将失败,而使用 index
发送相同的文档总是会成功.
然后,如果出于性能原因,您知道您将创建一个文档(使用 create
或 index
),然后您将只更新几个属性,然后使用 update
可能有道理。
否则,如果您总是发送完整的文档,我会一直使用 index
来创建和更新。每当它看到 index
操作时,ES 将创建文档(如果文档不存在)或替换它(如果存在),但调用总是会成功。
简短的回答:没有,没有缺点。
创建和更新端点是特例。使用 create 如果文档已经存在,您什么都不要做。通过更新,如果您没有文档的所有数据,您可以提供更少的数据,您可以只添加几个字段。您还可以确保该文档仅在更新时已存在的情况下才被编入索引。
我正在使用 Elasticsearch Bulk API 创建或更新文档。
我确实知道它们是创建的还是更新的,但我可以通过将它们全部设为 index
或 "upserts" 的 SQL 意义来简化我的代码。
与使用更明确的 create
和 update
相比,使用 index
(并让 ES 弄明白)有什么缺点吗?
您无法对所有内容使用索引。根据 docs:
index will add or replace a document as necessary
如果您要发送 create
,您必须确保索引中不存在该文档,否则调用将失败,而使用 index
发送相同的文档总是会成功.
然后,如果出于性能原因,您知道您将创建一个文档(使用 create
或 index
),然后您将只更新几个属性,然后使用 update
可能有道理。
否则,如果您总是发送完整的文档,我会一直使用 index
来创建和更新。每当它看到 index
操作时,ES 将创建文档(如果文档不存在)或替换它(如果存在),但调用总是会成功。
简短的回答:没有,没有缺点。
创建和更新端点是特例。使用 create 如果文档已经存在,您什么都不要做。通过更新,如果您没有文档的所有数据,您可以提供更少的数据,您可以只添加几个字段。您还可以确保该文档仅在更新时已存在的情况下才被编入索引。