opensearch 允许我们以两种方式更新给定文档。
我进行了测试来观察单个文档的并发更新。有趣的是,PUT 请求始终成功,而 POST 请求会触发 version_conflict_engine_exception。尽管此异常是预料之中的,但它引发了有关更新 API 中潜在的额外开销的问题。不幸的是,我找不到相关信息。您能建议哪种方法在执行性能方面表现更好吗?
索引API 此操作对结果进行索引。
PUT index/_doc/1
使用索引 API 更新文档时,即使文档未更改,也始终会创建文档的新版本。
POST index/_update/1
此操作:
因此,由于 Index API 需要的操作少于 Update API 调用,因此 Index API
PUT index/_doc/1
的性能将优于 Update API POST index/_update/1
。
关于版本冲突异常:
索引操作可以是有条件的,并且仅当对文档的最后一次修改分配了由 if_seq_no 和 if_primary_term 参数指定的序列号和主要术语时才执行。如果检测到不匹配,操作将导致 VersionConflictException 和状态代码 409。有关更多详细信息,请参阅乐观并发控制。
使用索引 API 更新文档时,即使文档未更改,也始终会创建文档的新版本。如果这是不可接受的,请使用 _update API,并将 detector_noop 设置为 true。此选项在索引 API 上不可用,因为索引 API 不会获取旧源,也无法将其与新源进行比较。 https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-index_.html#index-noop