我有一个弹性搜索的用例来更新文档。弹性搜索通过查询更新来更新复杂文档
我的文档是像这个 -
{
"first_name" : "firstName",
"last_name" : "lastName",
"version" : 1234,
"user_roles" : {
"version" : 12345,
"id" : 1234,
"name" : "role1"},
},
"groups" : {
"version" : 123,
"list": [
{"id":123, "name" : "ashd"},
{"id":1234, "name" : "awshd"},
]
}
}
现在depepeding一些饲料我要么会被更新父文档或将更新嵌套的文档。
我能找到如何更新像firstName和lastName却无力的基本属性得到如何更新复杂/嵌套的人
我不喜欢的东西从REST客户端 -
"script": {
"inline": "ctx._source.user_roles = { "id" : 5678, "name" :"hcsdl"}
}
但它给我的例外 -
实际使用案例 - 我将实际上得到一个在java中的地图。 此密钥可以是像“first_name”这样的简单密钥,也可以是像“user_role”和“groups”这样的复杂密钥 我想使用版本更新查询更新文档。
我写的代码是什么喜欢 -
for (String key : document.keySet()) {
String value = defaultObjectMapper.writeValueAsString(document.get(key));
scriptBuilder.append("ctx._source.");
scriptBuilder.append(key);
scriptBuilder.append('=');
scriptBuilder.append(value);
scriptBuilder.append(";");
}
,其中文档是地图 现在,我可能会得到简单的字段更新或复杂的对象。 我尝试给像user_roles.id和user_roles.name这样的密钥,并试图给出完整的user_roles,但没有任何工作。
有人能帮助环聊
你什么异常?您可能需要避开双引号。 – Val