ElasticSearch от _update_by_query как обновить типизированное поле XContentType.JSON
Я сохранил схему в ES примерно так:
{
"userId123": {
"userPhoneInfo": {
"phoneBrand": "Apple",
"phoneOS": "IOS"
},
"userName": "XYZ",
"userPhoneNo": "ABCDEFG"
}
}
здесь userId123 - это _id. Хочу обновить userPhoneInfo. он может быть нулевым или иметь значение json. ниже _update_by_query работает для обоих случаев
{
"query": {
"match": {
"userPhoneNo": "ABCDEFG"
}
},
"script": {
"source": "ctx._source.userPhoneInfo=params.userPhoneInfo;ctx._source.userName=params.userName;",
"lang": "painless",
"params": {
"userPhoneInfo" : {
"phoneBrand": "OnePlus",
"phoneOS": "android",
},
"userName":"XYZ"
}
}
}
В java я использовал ниже скрипт и пармы:
new Script(Script.DEFAULT_SCRIPT_TYPE,
Script.DEFAULT_SCRIPT_LANG,
"ctx._source.userPhoneInfo.phoneBrand = params.phoneBrand;" +
"ctx._source.userPhoneInfo.phoneOS = params.phoneOS;",
params);
Map<String, Object> params = new HashMap<>();
params.put("phoneBrand", "OnePlus");
params.put("phoneOS", "android");
но получаю это исключение:! org.elasticsearch.ElasticsearchException: исключение Elasticsearch [type = null_pointer_exception, reason =null]! в org.elasticsearch.ElasticsearchException.innerFromXContent
Если я использую скрипт и такие параметры
new Script(Script.DEFAULT_SCRIPT_TYPE,
Script.DEFAULT_SCRIPT_LANG,
"ctx._source.userPhoneInfo = params.userInfo;",
params);
Map<String, Object> params = new HashMap<>();
params.put("userPhoneInfo", new UserPhoneInfo("OnePlus","android"));
Получаю это исключение! java.lang.IllegalArgumentException: невозможно записать xcontent для неизвестного значения класса типа com.ffb.pno.dtos.listingMeta.PPUAttributes! на org.elasticsearch.common.xcontent.XContentBuilder.unknownValue
Пожалуйста, помогите мне, что я делаю не так