2017-08-23 3 views
0

Angenommen ich ein Dokument mit geschachtelten Dokument haben, wie:Hinzufügen/Aktualisieren von verschachtelten Dokumenten Verschachtelte Datentypen - Elasticsearch

{ 
    "dept_name" : "IT", 
    "dept_code" : "IT", 
    "staffs" : [ 
     { 
      "emp_name" : "A", 
      "emp_id" : "1", 
      "emp_salary" : "10000" 
     }, 
     { 
      "emp_name" : "B", 
      "emp_id" : "2", 
      "emp_salary" : "20000" 
     }, 
     { 
      "emp_name" : "C", 
      "emp_id" : "3", 
      "emp_salary" : "30000" 
     } 
    ] 
} 

Nun, ich muss die verschachtelten Typ „Stäbe“ hinzufügen, die ich herausgefunden haben, wie um es zu tun. Im Folgenden finden Sie die Update-Code (auf verschachtelte Art Zugabe):

GET dept/dept/1/_update 
{ 
    "script": { 
    "lang": "painless", 
    "inline": "ctx._source.staffs.add(params.dept);", 
    "params": { 
     "dept": { 
       "emp_name" : "D", 
       "emp_id" : "4", 
       "emp_salary" : "40000" 
      } 
     } 
    } 
} 

Aber was ist, wenn ich ein Feld oder zwei von Nested Typ aktualisieren müssen. Zum Beispiel muss ich die "emp_salary" auf 35000 von "emp_id" = 3 aktualisieren. Wie kann dies erreicht werden? Dafür habe ich kam mit einem Verfahren, wie unten (Aktualisierung verschachtelte Art vorhanden):

GET dept/dept/1/_update 
{ 
    "script": { 
    "lang": "painless", 
    "inline": """ 
     int i=0; 
     for(LinkedHashMap obj:ctx._source.staffs){ 
     if(obj.id==params.dept.emp_id) 
     { 
      ctx._source.staffs[i]=params.dept; 
     } 


     i++; 
    """, 
    "params": { 
     "dept": { 
       "emp_name" : "C", 
       "emp_id" : "3", 
       "emp_salary" : "35000" 
      } 
     } 
    } 
} 

Ich bin nicht sicher, ob dies ein effizienter Weg, es zu tun ist. Aber mein Hauptproblem ist, ich kann nicht zwei Update-Befehle halten, um beide Funktionen zu erreichen (Hinzufügen neuer verschachtelter Dokumente & Aktualisieren von Feldern der vorhandenen verschachtelten Dokumente). Ich muss beides zu einem kombinieren. Es sollte funktionieren, wenn die verschachtelten Dokumente nicht vorhanden sind, dann sollte es ein neues verschachteltes Dokument hinzufügen und falls es existiert, sollte es existierende verschachtelte Dokumente aktualisieren.

Antwort

0

Ich habe eine Methode gefunden, dies mit Update-Skript zu tun. Hier ist der Link der post.

Verwandte Themen