我正在运行一个更新ElasticSearch上的用户文档的流程。此过程可以在不同计算机上的多个实例上运行。如果2个实例将尝试运行脚本以同时更新同一文档,是否会出现某些数据由于竞争条件而丢失的情况?或内部脚本机制是安全的(使用版本属性进行乐观锁定或任何其他方式)?
答案 0 :(得分:1)
对于那种工作,使用version属性是安全的。
使用version: true
GET /index/type/_search
{
"version": true
your_query...
}
然后,对于更新,添加与搜索期间返回的数字对应的版本属性。
POST /index/type/the_id_to_update/_update?version=3 // <- returned by the search
{
"doc":{
"ok": "name"
}
}
https://www.elastic.co/guide/en/elasticsearch/guide/current/version-control.html