NEST更新包含删除的文档

时间:2014-06-20 09:12:30

标签: c# elasticsearch 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()
            );

但是仍然保留带有 item1 键的项目。有谁知道,我如何告诉更新方法删除此条目?

1 个答案:

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

希望这有帮助。