【发布时间】:2016-07-29 11:32:40
【问题描述】:
我有一个使用弹性搜索来更新文档的用例。
我的文档是这样的-
{
"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"},
]
}
}
现在根据一些提要,我将更新父文档或更新嵌套文档。
我能够找到如何更新名字和姓氏等基本属性,但无法获得如何更新复杂/嵌套的属性
我从 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,但没有任何效果。
谁能帮忙
【问题讨论】:
-
你得到什么异常?您可能需要转义双引号。
标签: elasticsearch groovy