Как добавить массив строк в существующее поле массива строк в Elasticsearch с помощью скрипта?Добавлены уникальные значения из массива в массив в ElasticSearch
Результирующий массив строк в Elasticsearch должен содержать только уникальные строковые элементы.
Я знаю, как добавить значение в массив строк:
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}}
мне нужен один и тот же код для массива строк
x = ["test1", "test2"]
Я попытался выполнить этот код. Ошибка: > {"script": "ctx._source.a + = x; ctx._source.a.uniq", "params": {"x": ["1", "2", "3", " «111», «222», «333»]}} <{"error": "ElasticsearchIllegalArgumentException [не удалось выполнить скрипт]; вложен: GroovyScriptExecutionException [MissingPropertyException [Исключение оценки свойства« uniq »для java.util.ArrayList, Причина : groovy.lang.MissingPropertyException: Нет такого свойства: uniq для класса: java.lang.String]]; "," status ": 400} –
Поскольку языковой тег в вашем вопросе предлагает ruby, uniq является допустимым синтаксисом для ruby. В то время как ошибка показывает язык как groovy, что означает, что скрипт исполнялся как отличный скрипт, а не как ruby-код. Язык по умолчанию - отличный. Ваше решение по сути совпадает с моим ответом. – Rahul