2016-09-27 4 views
0

次のように、POCOがあります。ネストされたオブジェクトのelasticsearchバージョン2.0.0.0の部分的な更新のネスト

public class Graph 
{ 
    public string Id { get; set; } // Indexed by this 
    public List<Node> NodeList { get; set; } 
} 

public class Node 
{ 
    public string Id { get; set; } 
    public string Name { get; set; } 
    public List<Edge> EdgeList { get; set; } 
} 

public class Edge 
{ 
    public string Id { get; set; } 
    public double Cost { get; set; } 
} 

部分的に私のGraph を更新するとき、私はそれがIdだことでNodeList内の既存のNodeを見つけ、それがNameEdgeプロパティの更新したいです。 I Nodeオブジェクトを私のNodeListに追加します。既存のものだけを更新したい。

SOFAR私が試してみた:

public void UpdateGraph(string index, Graph graph) 
{ 
    var docPath = new DocumentPath<Graph>(graph.Id).Index(index); 
    try 
    { 
     var updateResp = client.Update<Graph, Graph>(docPath, searchDescriptor => searchDescriptor 
      .Doc(graph)  
      .RetryOnConflict(4) 
      .Refresh(true) 
     ); 
    } 
} 

を私の現在の実装では、あなたは私がやっているすべては 古いGraphオブジェクトを交換されて見ることができるように。しかし私はGraphオブジェクトを部分的に更新したいと思います。 Nodeオブジェクトのリストをパラメータとして送信したいとします。 NodeListにあるものを見つけ、Nodeオブジェクトのみを更新します。

次のようなたぶん何か、

public void UpdateGraph(string index, List<Node> node) 
{ 
    //Code here 
} 

答えて

1

NodeListList<Node>あるので提供された値は、既存の値を置き換えると同じように、部分的に更新することはできません。

ただし楽観ためのGET要求からバージョン番号を使用して、

  • がElasticsearchに戻って、アプリケーション
  • インデックス変更文書の変更を行い、既存の文書を入手

    1. optimistic concurrency controlを使用することができます並行性

    次のようなものが動作します。

    var getResponse = client.Get<Graph>("graph-id"); 
    
    var graph = getResponse.Source; 
    var node = graph.NodeList.First(n => n.Id == "node-id"); 
    
    // make changes to the node 
    node.Name = "new name"; 
    node.EdgeList.First().Cost = 9.99; 
    
    var indexResponse = client.Index(graph, i => i 
        // specify the version from the get request 
        .Version(getResponse.Version) 
    ); 
    

    Graphがgetとindexの呼び出しの間で変更された場合、インデックス呼び出しで409の応答が返されます。あなたが定期的にNode sおよびEdgeの互いに独立してを更新する必要がある場合

    、あなたがオブジェクトグラフとインデックスの変更を引き戻すために必要とせずに更新できるようになるParent/Child relationshipsでそれらをモデル化することもできます。

  • 関連する問題