C# 弹性-在一个请求中更新多个文档
我需要每隔几分钟在Elastic中更新几千个项目,不幸的是,我不能选择重新编制索引。根据我的研究,更新项目的最佳方法是使用-我已经成功地更新了这样的单个文档-C# 弹性-在一个请求中更新多个文档,c#,json,
elasticsearch,nest,C#,Json,
elasticsearch,Nest,我需要每隔几分钟在Elastic中更新几千个项目,不幸的是,我不能选择重新编制索引。根据我的研究,更新项目的最佳方法是使用-我已经成功地更新了这样的单个文档- { “查询”:{ “匹配”:{ “项目ID”:{ “查询”:“1” } } }, “脚本”:{ “源”:“ctx.\u source.field=params.updateValue”, “郎”:“无痛”, “参数”:{ “更新值”:“测试”, } } } var response=wait Client.UpdateByQueryAs
{
“查询”:{
“匹配”:{
“项目ID”:{
“查询”:“1”
}
}
},
“脚本”:{
“源”:“ctx.\u source.field=params.updateValue”,
“郎”:“无痛”,
“参数”:{
“更新值”:“测试”,
}
}
}
var response=wait Client.UpdateByQueryAsync(q=>q
.索引(“主产品”)
.Query(q=>x.MatchQuery)
.Script(s=>s.Source(x.Script).Lang(“无痛”).Params(x.Params))
.Conflicts(Elasticsearch.Net.Conflicts.procedure)
);
虽然这样做很有效,但由于它会生成数千个请求,因此效率极低-是否有一种方法可以在单个请求中使用匹配的ID更新多个文档?我已经试过了,但似乎不能用于此目的。任何帮助都将不胜感激 如果可能,尝试概括您的查询 与其针对单个
itemId
,不如尝试使用:
从外观上看,您的(看似简化的)脚本将设置为相同的值,而与文档ID/itemId
无关。就这样
如果脚本确实根据文档ID/itemIds
设置了不同的值,则可以将参数
设置为多值:
"params": {
"updateValue1": "test1",
"updateValue2": "test2",
...
}
然后他们:
因此,目标单据将更新为相应的值
"params": {
"updateValue1": "test1",
"updateValue2": "test2",
...
}
...
def value_to_set = params['updateValue' + ctx._source['itemId']];
...