2015-05-04 104 views
0

如何刪除嵌套對象,而不是使用Nest庫進行彈性搜索時的索引。刪除使用NEST進行彈性搜索的嵌套文檔C#

public class Make 
{ 
    public string MakeId {get;set;} 
    public string MakeName {get;set;} 
    public string Address { get;set;} 

    [ElasticProperty(Type = FieldType.Nested)] 
    public List<Cars> Models {get;set;} 
} 

在上面的映射中,我想刪除一個模型條目而不刪除整個索引。

我試着用DeleteByQuery刪除它,但它刪除了整個Make索引。

回答

1

如果你不介意的腳本,你可以嘗試:

var updateResponse = client.Update<Make>(descriptor => descriptor 
    .Id(documentId) 
    .Script("ctx._source.models.remove(0)") 
    .Lang("groovy")); 

或無腳本

var make = new Make {Id = "1", Models = new List<Cars> 
{ 
    new Cars{Name = "test"}, 
    new Cars{Name = "test2"} 
}}; 

make.Models.RemoveAt(1); 

var updateResponse = client.Update<Make>(descriptor => descriptor 
    .Id("1") 
    .Doc(make)); 
+0

感謝您的建議羅布。這意味着刪除總是意味着整個文檔,決不能刪除只有嵌套的對象。所以我們只需要對嵌套文檔進行更新。 –