ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
一个常见的设置是使用其它数据库作为主要的数据存储,使用 Elasticsearch 做数据检索, 这意味着主数据库的所有更改发生时都需要被复制到 Elasticsearch ,如果多个进程负责这一数据同步,你可能遇到类似于之前描述的并发问题。 <br/> 如果你的主数据库已经有了版本号, 或一个能作为版本号的字段值,比如 timestamp,那么你就可以在 Elasticsearch 中通过增加 `version_type=external` 到查询字符串的方式重用这些相同的版本号, 版本号必须是大于零的整数, 且小于 9.2E+18 (一个 Java 中 long 类型的正值)。 <br/> 外部版本号的处理方式和我们之前讨论的内部版本号的处理方式有些不同,Elasticsearch 不是检查当前 `_version` 和请求中指定的版本号是否相同, 而是检查当前`_version`是否 小于 指定的版本号。 如果请求成功,外部的版本号作为文档的新`_version `进行存储。 ```json # 更新id=1001的文档 # version更新之前是4,进行更新时要大于4 POST /shopping/_doc/1001?version=5&version_type=external { "doc": { "title": "华为手机123" } } 响应的结果如下: { "_index" : "shopping", "_type" : "_doc", "_id" : "1001", "_version" : 5, # 版本号变为5了 "result" : "updated", "_shards" : { "total" : 2, "successful" : 1, "failed" : 0 }, "_seq_no" : 4, "_primary_term" : 1 } ```