2016-07-29 10 views
0

Ich habe einen Anwendungsfall der elastischen Suche, um ein Dokument zu aktualisieren.Elastische Suche Update von Abfrage zu komplexen Dokument aktualisieren

Mein Arzt ist so etwas wie this-

{ 
"first_name" : "firstName", 
"last_name" : "lastName", 
"version" : 1234, 
"user_roles" : { 
    "version" : 12345, 
    "id" : 1234, 
    "name" : "role1"}, 
}, 
"groups" : { 
    "version" : 123, 
"list": [ 
{"id":123, "name" : "ashd"}, 
{"id":1234, "name" : "awshd"}, 
] 
} 

}

Jetzt auf einige Feed depepeding werde ich entweder die Eltern doc updaten oder die verschachtelten doc updaten.

ich in der Lage bin zu finden, wie die grundlegenden Attribute wie vorName zu aktualisieren und Nachnamen aber nicht in der Lage zu bekommen, wie komplex/verschachtelt diejenigen aktualisieren

Ich habe so etwas wie von REST mandanten

"script": { 
    "inline": "ctx._source.user_roles = { "id" : 5678, "name" :"hcsdl"} 
    } 

aber es gibt mir Ausnahme-

Tatsächlichen Anwendungsfall- Ich werde tatsächlich eine Karte in Java bekommen. Dieser Schlüssel kann ein einfacher Schlüssel wie "first_name" sein oder ein komplexer Schlüssel wie "user_role" und "groups" sein. Ich möchte das Dokument mit update by query auf Version aktualisieren.

Der Code, den ich geschrieben habe, ist etwas wie-

for (String key : document.keySet()) { 

      String value = defaultObjectMapper.writeValueAsString(document.get(key)); 

      scriptBuilder.append("ctx._source."); 
      scriptBuilder.append(key); 
      scriptBuilder.append('='); 
      scriptBuilder.append(value); 
      scriptBuilder.append(";"); 
     } 

wo Dokument der Karte Nun könnte ich die einfachen Felder erhalten oder komplexes Objekt zu aktualisieren. Ich habe versucht, Schlüssel wie user_roles.id und user_roles.name zu geben und habe auch versucht, komplette user_roles zu geben, aber nichts funktioniert.

Kann jemand Helpout

+0

Welche Ausnahme Sie bekommen? Wahrscheinlich müssen Sie den doppelten Anführungszeichen entkommen. – Val

Antwort

0

dieses Versuchen mit groovigen Karten statt wörtlich JSON in Ihrem Skript:

"script": { 
    "inline": "ctx._source.user_roles = [ 'id' : 5678, 'name' : 'hcsdl']} 
} 
+0

hey Val, ja die obige Syntax funktioniert, aber ich bin auf der Suche nach etwas, das generisch ist und kann durch Java-Code mit dem Plugin ReindexPlugin tun. Ich habe den genauen Anwendungsfall aktualisiert – user2634891

+0

Ok ich verstehe, lassen Sie mich überarbeiten. – Val

+0

Hey Val, Hast du die Chance bekommen, an der aktualisierten Frage zu arbeiten? – user2634891

Verwandte Themen