我有一個彈性搜索的用例來更新文檔。彈性搜索通過查詢更新來更新複雜文檔
我的文檔是像這個 -
{
"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