Wie füge ich ein String-Array zu einem vorhandenen String-Array-Feld in Elasticsearch mit Hilfe von Skript?Hinzugefügt einzigartige Werte von Array zu Array in ElasticSearch
Das Ergebnis-String-Array in Elasticsearch darf nur eindeutige String-Elemente enthalten.
Ich weiß, wie man einen Wert in String-Array hinzuzufügen:
x = "test"
client.update index:'test', type:'test', id:'1', body:{script:"if (!ctx._source.a.contains(x)) {ctx._source.a += x;}", params:{x: x}}
Ich brauche den gleichen Code für String-Array
x = ["test1", "test2"]
habe ich versucht, diesen Code auszuführen. Fehler: > {"script": "ctx._source.a + = x; ctx._source.a.uniq", "params": {"x": ["1", "2", "3", "111", "222", "333"]}} <{"error": "ElasticsearchIllegalArgumentException [Script konnte nicht ausgeführt werden]; geschachtelt: GroovyScriptExecutionException [MissingPropertyException [Exception evaluating property 'uniq' für java.util.ArrayList, Reason : groovy.lang.MissingPropertyException: Keine solche Eigenschaft: uniq für Klasse: java.lang.String]]; "," status ": 400} –
Da das Sprachtag in Ihrer Frage ruby vorschlägt, ist uniq eine gültige Syntax für Ruby. Während der Fehler die Sprache als groovy anzeigt, bedeutet das, dass das Skript als grooviges Skript und nicht als Ruby-Code ausgeführt wurde. Die Standardsprache ist groovy. Ihre Lösung ist im Wesentlichen die gleiche wie meine Antwort. – Rahul