公式ドキュメントUpdate API - Upsertsscripted_upsert
によると、スクリプト内で更新 (既存のドキュメントの場合) または挿入 (新しいドキュメントの場合) フォームを処理するために使用できます。問題は、それを行うためにスクリプトがどのように見えるべきかを決して示していないということです。Java - Update APIには、ScriptUpsert の使用に関する情報がありません。
これは私が使用しているコードです:
//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
Java コードから scriptUpsert を機能させるにはどうすればよいですか?