elastic-批量上载:索引x更新

fv2wmkja  于 2021-06-10  发布在  ElasticSearch
关注(0)|答案(1)|浏览(308)

我有两个不同的批量上传要执行,每一个都会发生的顺序是完全不可预测的,在一个加载中,我会有以下字段: SERVER_NAME , OS ,和 PROD_1_VERSION 在另一种情况下,我会有如下字段: SERVER_NAME , OS ,和 PROD_2_VERSION 我的文件如下所示:

{"index":{"_index" : "myindex", "_id" : "MY_SERVER_1" }}
{"SERVER_NAME":"MY_SERVER_1","OS":"Ubuntu","PROD_1_VERSION":"1.0.0.5" }
{"index":{"_index" : "myindex", "_id" : "MY_SERVER_2" }}
{"SERVER_NAME":"MY_SERVER_2","OS":"Windows10","PROD_1_VERSION":"2.0.0.0" }
{"index":{"_index" : "myindex", "_id" : "MY_SERVER_3" }}
{"SERVER_NAME":"MY_SERVER_3","OS":"Fedora","PROD_1_VERSION":"2.5.0.1" }

以及:

{"index":{"_index" : "myindex", "_id" : "MY_SERVER_1" }}   
{"SERVER_NAME":"MY_SERVER_1","OS":"Ubuntu","PROD_2_VERSION":"6.0.0.5" } 
{"index":{"_index" : "myindex", "_id" : "MY_SERVER_2" }}
{"SERVER_NAME":"MY_SERVER_2","OS":"Windows10","PROD_2_VERSION":"7.0.0.0" } 
{"index":{"_index" : "myindex", "_id" : "MY_SERVER_3" }}
{"SERVER_NAME":"MY_SERVER_3","OS":"Fedora","PROD_2_VERSION":"8.5.0.1" }

如果我按照给定的顺序加载 "index" 财产 "PROD_2_VERSION" 将被添加,但是 "PROD_1_VERSION" 就会迷失方向
如果我修改它,并使用 "update" 而不是 "index" (包括 { "doc" : ... } 在属性之前,第一次加载失败,因为它试图更新尚不存在的内容
如果第一次装载 "index" 第二个是 "update" 然而,正如前面所提到的,它是有效的,每种情况发生的顺序是无法控制的。
有没有办法让它像这样工作:

if record exit, 
   use behave like 'index'
else
   behave like 'update'

???

aemubtdh

aemubtdh1#

我不确定是否完全理解您的用例。但要在ElasticSearch中批量执行“upsert”(插入或更新),必须添加

"doc_as_upsert" : true

在你的医生部分之后。
以下是elasticsearch官方文档的示例:

{ "update" : {"_id" : "2", "_index" : "index1", "retry_on_conflict" : 3} }
{ "doc" : {"field" : "value"}, "doc_as_upsert" : true }

相关问题