我的问题如下。我有一个由字典组成的数据类型。
Data d = new Data();
d.Id = "1"
d.Items.Add("item1", "hello");
d.Items.Add("item2", "world");
现在我想用键 item1 删除Item。
d.Items.Remove("item1");
Index.Update(d);
我的更新方法如下所示:
client.Update<Data>(u => u
.Index("defaultindex")
.Type("data")
.Document(d)
.Id(d.Id)
.RetryOnConflict(5)
.Refresh()
);
但是仍然保留带有 item1 键的项目。有谁知道,我如何告诉更新方法删除此条目?
答案 0 :(得分:2)
更新可以通过脚本或更新的文档进行。在您的情况下,您通过文档选项进行更新,但是您在通话中指定了脚本类型,因为您使用的是Update<T>
而不是Update<T,K>
。您可以在Nest Update by Script API中看到脚本更新的示例。
尝试将代码更改为以下内容,您应该会看到此更新。
client.Update<Data, Data>(u => u
.Index("defaultindex")
.Type("data")
.Document(d)
.Id(d.Id)
.RetryOnConflict(5)
.Refresh()
);
您甚至可以发送部分更新,只更新Items
部分。
var updateDocument = new System.Dynamic.ExpandoObject();
var newItems = new Dictionary<string, string>();
newItems.Add("item2","world");
updateDocument.Items = newItems;
client.Update<Data, object>(u => u
.Index("defaultindex")
.Type("data")
.Document(updateDocument)
.Id(d.Id)
.RetryOnConflict(5)
.Refresh()
);
希望这有帮助。