Как создать экземпляр объекта в скрипте пера ElasticSearch - PullRequest
0 голосов
/ 11 марта 2020

В Java У меня есть сущность с вложенными объектами:

public class MyData {
    @Id
    public UUID id;
    @Field(type = FieldType.Nested)
    public List<Entry> entries = new ArrayList<>(); // Entry is the class with two fields: String and int
}

Я хочу обновить entries, добавив новый экземпляр 'Entry'.

            Script script = new Script(
                    Script.DEFAULT_SCRIPT_TYPE,
                    "painless",
                    "ctx._source.entries += params.entry",
                    new HashMap<>(){{put("entry", value}}
            );

Если значение json, то я получаю ошибку:

Невозможно привести java .lang.String к java .util.ArrayList

Если значением является сам объект: new Entry("abc", 0), то я получаю сообщение об ошибке:

java .lang.IllegalArgumentException: невозможно записать xcontent для неизвестного значения типа класс com.x.dto.Entry. И он также не принимает Map.

Я понимаю, что это должно быть очень просто, но не нашел, как создать экземпляр требуемого объекта.

1 Ответ

0 голосов
/ 11 марта 2020

Можно сделать так:

            Script script = new Script(
                    Script.DEFAULT_SCRIPT_TYPE,
                    "painless",
                    "ctx._source.entries.add(['id': params.id, 'count':0])",
                    new HashMap<>(){{put("id", myValueHere}}
            );

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...