公式文書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コードから動作しますか?