Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 弹性-在一个请求中更新多个文档_C#_Json_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Nest - Fatal编程技术网 elasticsearch,nest,C#,Json,elasticsearch,Nest" /> elasticsearch,nest,C#,Json,elasticsearch,Nest" />

C# 弹性-在一个请求中更新多个文档

C# 弹性-在一个请求中更新多个文档,c#,json,elasticsearch,nest,C#,Json,elasticsearch,Nest,我需要每隔几分钟在Elastic中更新几千个项目,不幸的是,我不能选择重新编制索引。根据我的研究,更新项目的最佳方法是使用-我已经成功地更新了这样的单个文档- { “查询”:{ “匹配”:{ “项目ID”:{ “查询”:“1” } } }, “脚本”:{ “源”:“ctx.\u source.field=params.updateValue”, “郎”:“无痛”, “参数”:{ “更新值”:“测试”, } } } var response=wait Client.UpdateByQueryAs

我需要每隔几分钟在Elastic中更新几千个项目,不幸的是,我不能选择重新编制索引。根据我的研究,更新项目的最佳方法是使用-我已经成功地更新了这样的单个文档-

{
“查询”:{
“匹配”:{
“项目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']];
...