设想:
我们正在将部分 Firestore 数据库同步到 ElasticSearch 实例。我们使用外部版本控制,并以毫秒为单位的时间戳作为版本号。
我们正在做什么:
当在 Firestore 中创建新文档时,或者当我们需要完全覆盖文档时,我们会通过调用INDEX API进行同步,这会按预期工作。
https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#_index
请注意,它确实包含version和 的参数version_type(我们将其设置为external)。
当我们只需要更新特定字段时,我们调用
UPDATE API:
https: //www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#_update预计它也包含version和,但它不包含这些参数。不设置外部版本控制会导致调用返回错误:version_type
Validation Failed: 1: internal versioning can not be used for optimistic concurrency control. Please use if_seq_no and if_primary_term instead
问题:
我们手头没有seq_no,也没有。primary_term我们依靠基于 Firestore 更新时间戳(以毫秒为单位)的外部版本控制的乐观并发控制。
要更新的特定字段是一个计算,它甚至不是 Firestore 中原始文档的一部分,因此每次都简单地将整个文档覆盖到 ES 是不可行的。我们只需要更新 ES 中的一个字段。
还有......问题:
version和version_type?也许我们遗漏了一些关于这个概念的东西,这根本不是正确的方法。version和version_type是故意不在更新 API范围内...这种情况的正确方法是什么?由于我们使用的是外部版本控制,seq_no因此primary_term不应该是相关的。将信息从 ES 保存回 Firebase 对于我们的需要来说非常麻烦。客户端是 @elastic/elasticsearch:Node 中的 7.9.0,以防万一。
预先非常感谢您。
| 归档时间: |
|
| 查看次数: |
398 次 |
| 最近记录: |