elasticsearch elasticsearch中是否有批量部分更新?
我有一个50个属性的elasticsearch模型,我正在将数据传输到elasticsearch。然而,我的elasticsearch别名中大约有150000个文档,我想通过批量部分更新来更新这些文档的3个属性。我知道批量更新和部分更新是分开的,但是elasticsearch中有部分批量更新吗?您可以使用批量API发送部分更新。这里有一个例子elasticsearch elasticsearch中是否有批量部分更新?,elasticsearch,nest,elasticsearch,Nest,我有一个50个属性的elasticsearch模型,我正在将数据传输到elasticsearch。然而,我的elasticsearch别名中大约有150000个文档,我想通过批量部分更新来更新这些文档的3个属性。我知道批量更新和部分更新是分开的,但是elasticsearch中有部分批量更新吗?您可以使用批量API发送部分更新。这里有一个例子 private static void Main() { var defaultIndex=“文档”; 变量池=新的SingleNodeConnectio
private static void Main()
{
var defaultIndex=“文档”;
变量池=新的SingleNodeConnectionPool(新Uri(“http://localhost:9200"));
var设置=新连接设置(池)
.DefaultIndex(默认索引);
var客户端=新的ElasticClient(设置);
if(client.indexists(defaultIndex.Exists)
client.DeleteIndex(defaultIndex);
var docs=Enumerable.Range(1,10)。选择(i=>newmydocument(i)
{
Message=$“Message{i}”
});
//对文件进行批量索引
var bulkResponse=client.Bulk(b=>b
.IndexMany(文档)
.Refresh(Refresh.WaitFor)
);
var searchResponse=client.Search(s=>s
.Sort(so=>so.升序(“\u id”))
);
//更新文件
bulkResponse=client.Bulk(b=>b
.UpdateMany(文档,(业务单元,文档)=>
{
如果(文档Id%3==0)
{
//使用脚本更新
bu.Id(doc.Id).Script(s=>s
.Source(“ctx.\u Source.message='message'+(Integer.parseInt(ctx.\u id)*2);”)
);
}
否则如果(doc.Id%2==0)
{
//使用部分文档进行更新
bu.Id(doc.Id).doc(新的{message=“updated message”});
}
其他的
{
//发送原始文档以进行更新
bu.Doc(Doc);
}
返回bu;
})
.Refresh(Refresh.WaitFor)
);
searchResponse=client.Search(s=>s
.Sort(so=>so.升序(“\u id”))
);
}
公共类MyDocument
{
公共MyDocument(int id)=>id=id;
公共int Id{get;set;}
公共字符串消息{get;set;}
}
最终搜索响应返回
{
"took" : 0,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : 10,
"max_score" : null,
"hits" : [
{
"_index" : "documents",
"_type" : "mydocument",
"_id" : "1",
"_score" : null,
"_source" : {
"id" : 1,
"message" : "message 1"
},
"sort" : [
"1"
]
},
{
"_index" : "documents",
"_type" : "mydocument",
"_id" : "10",
"_score" : null,
"_source" : {
"id" : 10,
"message" : "updated message"
},
"sort" : [
"10"
]
},
{
"_index" : "documents",
"_type" : "mydocument",
"_id" : "2",
"_score" : null,
"_source" : {
"id" : 2,
"message" : "updated message"
},
"sort" : [
"2"
]
},
{
"_index" : "documents",
"_type" : "mydocument",
"_id" : "3",
"_score" : null,
"_source" : {
"id" : 3,
"message" : "message 6"
},
"sort" : [
"3"
]
},
{
"_index" : "documents",
"_type" : "mydocument",
"_id" : "4",
"_score" : null,
"_source" : {
"id" : 4,
"message" : "updated message"
},
"sort" : [
"4"
]
},
{
"_index" : "documents",
"_type" : "mydocument",
"_id" : "5",
"_score" : null,
"_source" : {
"id" : 5,
"message" : "message 5"
},
"sort" : [
"5"
]
},
{
"_index" : "documents",
"_type" : "mydocument",
"_id" : "6",
"_score" : null,
"_source" : {
"id" : 6,
"message" : "message 12"
},
"sort" : [
"6"
]
},
{
"_index" : "documents",
"_type" : "mydocument",
"_id" : "7",
"_score" : null,
"_source" : {
"id" : 7,
"message" : "message 7"
},
"sort" : [
"7"
]
},
{
"_index" : "documents",
"_type" : "mydocument",
"_id" : "8",
"_score" : null,
"_source" : {
"id" : 8,
"message" : "updated message"
},
"sort" : [
"8"
]
},
{
"_index" : "documents",
"_type" : "mydocument",
"_id" : "9",
"_score" : null,
"_source" : {
"id" : 9,
"message" : "message 18"
},
"sort" : [
"9"
]
}
]
}
}
请注意,源文档已更新
\u文档已使用部分更新更新文档
noop
请确保:这3个值不能基于静态值或现有字段编写脚本,因此您需要发送每个文档的实际值?此答案可能会有所帮助:(请参阅答案底部的最后一个批量命令)非常感谢,它非常有用,解决了我的问题