2016-07-29 79 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