Я использую ElasticsearchOperations
directories это лист объектов List Directory
String scriptText = "if (ctx._source.businessPartnerParams != null) { " +
"ctx._source.businessPartnerParams.bpName = 'test 3 ' " +
"}";
HashMap<String, Object> params = new HashMap<>();
params.put("directories", directories);
UpdateQuery updateQuery = UpdateQuery.builder(Query.findAll())
.withScriptType(INLINE)
.withLang("painless")
.withScript(scriptText)
.withParams(params)
.build();
ByQueryResponse byQueryResponse = operations.updateByQuery(updateQuery,
IndexCoordinates.of(RELEVANT_INDEX_NAME));
В кибане этот запрос выглядит так:
POST /partners-rd-partners-partners-1/_update_by_query?refresh=false { "query": { "wrapper": { "query": "eyJtYXRjaF9hbGwiOnt9fQ==" } }, "script": { "params": { "directories": "[Directory(id=DirectedTypeBUR001, code=BUR001, description=Имеет контактное лицо, type=DirectedType, value=null), Directory(id=DirectedTypeBUR002, code=BUR002, description=Имеет контактного партнера, type=DirectedType, value=null), Directory(id=DirectedTypeBUR003, code=BUR003, description=Имеет члена жилищного объединения, type=DirectedType, value=null)]" }, "lang": "painless", "source": """def message = params.directories.toArray(); Debug.explain(message); if (ctx._source.businessPartnerParams != null) { ctx._source.businessPartnerParams.bpName = 'test 3 ' }""" } }
Я не могу нормально достать params, т.к. Java складывает лист как string. Как положить или достать params как лист объектов а не строкой?