2016-07-29 76 views
0

我有一个弹性搜索的用例来更新文档。弹性搜索通过查询更新来更新复杂文档

我的文档是像这个 -

{ 
"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,但没有任何工作。

有人能帮助环聊

+0

你什么异常?您可能需要避开双引号。 – Val

回答

0

与常规地图,而不是逐字JSON脚本里面试试这个:

​​
+0

嘿瓦尔,是的上述语法的作品,但我正在寻找一些通用的东西,并可以通过Java代码使用ReindexPlugin插件来完成。 我更新了确切的使用案例 – user2634891

+0

好吧,我明白了,让我重写它。 – Val

+0

嗨Val, 您是否有机会参与更新的问题? – user2634891