Hier ist der Code, den ich verwendet habe. Die DocumentModel-Klasse wird als elasticsearch-Dokument verwendet. Derzeit verwende ich URL als elasticsearch '_id' und erzeuge UUID für andere Feld documentId mit Java. Wenn ich versuche, ein Dokument mit diesem Code zu indexieren, aktualisiert es das Dokument, falls vorhanden, oder den Index, falls nicht vorhanden. Problem ist, wenn es Dokument aktualisiert, aktualisiert es auch documentId. Aber ich muss DocumentId nicht aktualisieren und vorhandene DocumentId verwenden. Welche Änderung sollte ich in diesem Code machen, um dies zu tun?Upserting ein elasticsearch Dokument
String uuid = UUID.randomUUID().toString();
documentModel.setDocumentID(uuid);
String jsonForIndex = gson.toJson(documentModel);
IndexRequest indexRequest = new IndexRequest(indexName, typeName, documentModel.getId());
indexRequest.source(jsonForIndex);
UpdateRequest updateRequest = new UpdateRequest(indexName, typeName, documentModel.getId());
updateRequest.doc(jsonForUpdate);
updateRequest.upsert(indexRequest);
UpdateQuery updateQuery = new UpdateQueryBuilder().withIndexName(indexName).withType(typeName)
.withId(documentModel.getId()).withDoUpsert(true).withUpdateRequest(updateRequest).withIndexRequest(indexRequest).build();
elasticsearchTemplate.update(updateQuery).getId();
Danke. Gibt es eine Möglichkeit, UpdateQuery mit IndexRequest und UpdateRequest zu verwenden (ohne prepareGet zu verwenden)? –