我有一个地图字段,我正在尝试使用脚本(无痛)更新它。当我使用rest客户端执行脚本时,它可以工作,但不能使用java API(没有更改,但UpdateResponse中的结果是“UPDATED”)。任何人都可以帮我解决这个问题: Elasticsearch 5.2.2(也在5.1.1上尝试)
--------- Rest Client(Chrome):
POST localhost:9200/context/profile/720c7bc5-9c52-48bd-b281-760f595c6418/_update
BODY :{
"scriptedUpsert": true,
"script": {
"lang": "painless",
"inline": "ctx._source.put(\"scores\", params.scoringValue)",
"params": {
"scoringValue": {
"_i833rilwd": 333
}
}
}
}
--------- Java客户端:
String script = "ctx._source.put(\"scores\", params.scoringValue)";
//Map where I remove and put to update
Map scores = toRemove.getScores();
HashMap scriptParams = new HashMap<>();
scriptParams.put("scoringValue", scores);
Script actualScript = new Script(ScriptType.INLINE, "painless", script, scriptParams);
UpdateResponse resp = client.prepareUpdate(index, itemType, itemId).setScript(actualScript)
.execute()
.get();
请事先提供帮助
答案 0 :(得分:0)
我不确定JAVA,但我认为问题在于
\&#34;
试试这个
String script = "ctx._source.put(\\"scores\\", params.scoringValue)";
答案 1 :(得分:0)
通过在删除之前执行刷新索引解决,如果没有文档版本冲突。希望这会有所帮助。