c# – 包含删除的NEST更新文档

我的问题如下.我有一个由字典组成的数据类型.

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()
            );

但是具有关键项1的项仍然存在.有谁知道,我如何告诉更新方法删除此条目?

最佳答案 更新可以通过脚本或更新的文档进行.在您的情况下,您通过文档选项进行更新,但是您在呼叫中指定了脚本类型,因为您正在使用Update< T>而不是更新< 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()
            );

您甚至可以发送部分更新,只更新“项目”部分.

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()
            );

希望这可以帮助.

点赞