根據官方文檔Update API - Upserts,可以使用scripted_upsert
以便在腳本中處理更新(針對現有文檔)或插入(針對新文檔)表單。事情是他們從來沒有表明腳本應該如何去做。 Java - Update API沒有關於ScriptUpsert使用的任何信息。使用ElasticSearch的script_upsert創建文檔
這是我使用的代碼:
//My function to build and use the upsert
public void scriptedUpsert(String key, String parent, String scriptSource, Map<String, ? extends Object> parameters) {
Script script = new Script(scriptSource, ScriptType.INLINE, null, parameters);
UpdateRequest request = new UpdateRequest(index, type, key);
request.scriptedUpsert(true);
request.script(script);
if (parent != null) {
request.parent(parent);
}
this.bulkProcessor.add(request);
}
//A test call to validate the function
String scriptSource = "if (!ctx._source.hasProperty(\"numbers\")) {ctx._source.numbers=[]}";
Map<String, List<Integer>> parameters = new HashMap<>();
List<Integer> numbers = new LinkedList<>();
numbers.add(100);
parameters.put("numbers", numbers);
bulk.scriptedUpsert("testUser", null, scriptSource, parameters);
而且我得到以下異常時「爲testUser」文件不存在:
DocumentMissingException[[user][testUser]: document missing
我怎樣才能讓scriptUpsert工作從Java代碼?