From 8377f64a8a919b31c37f337fc92c3ea8ee9154d8 Mon Sep 17 00:00:00 2001 From: Peter-Josef Meisch Date: Fri, 26 Aug 2022 08:06:37 +0200 Subject: [PATCH] Fix update call in reactive client (Elasticsearch 7 client) Original Pull Request #2281 Closes #2276 --- .../client/erhlc/RequestConverters.java | 18 ++++++++++++++---- .../ReactiveElasticsearchClientUnitTests.java | 6 +++--- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/springframework/data/elasticsearch/client/erhlc/RequestConverters.java b/src/main/java/org/springframework/data/elasticsearch/client/erhlc/RequestConverters.java index 33c183736..1904905fa 100644 --- a/src/main/java/org/springframework/data/elasticsearch/client/erhlc/RequestConverters.java +++ b/src/main/java/org/springframework/data/elasticsearch/client/erhlc/RequestConverters.java @@ -337,8 +337,13 @@ public class RequestConverters { public static Request index(IndexRequest indexRequest) { String method = Strings.hasLength(indexRequest.id()) ? HttpMethod.PUT.name() : HttpMethod.POST.name(); boolean isCreate = (indexRequest.opType() == DocWriteRequest.OpType.CREATE); - String endpoint = endpoint(indexRequest.index(), indexRequest.type(), indexRequest.id(), - isCreate ? "_create" : null); + String endpoint; + if (indexRequest.opType() == DocWriteRequest.OpType.CREATE) { + endpoint = indexRequest.type().equals("_doc") ? endpoint(indexRequest.index(), "_create", indexRequest.id()) + : endpoint(indexRequest.index(), indexRequest.type(), indexRequest.id(), "_create"); + } else { + endpoint = endpoint(indexRequest.index(), indexRequest.type(), indexRequest.id()); + } Request request = new Request(method, endpoint); Params parameters = new Params(request); @@ -363,7 +368,9 @@ public class RequestConverters { } public static Request update(UpdateRequest updateRequest) { - String endpoint = endpoint(updateRequest.index(), updateRequest.type(), updateRequest.id(), "_update"); + String endpoint = updateRequest.type().equals("_doc") + ? endpoint(updateRequest.index(), "_update", updateRequest.id()) + : endpoint(updateRequest.index(), updateRequest.type(), updateRequest.id(), "_update"); Request request = new Request(HttpMethod.POST.name(), endpoint); Params parameters = new Params(request); @@ -501,8 +508,11 @@ public class RequestConverters { } public static Request explain(ExplainRequest explainRequest) { + String endpoint = explainRequest.type().equals("_doc") + ? endpoint(explainRequest.index(), "_explain", explainRequest.id()) + : endpoint(explainRequest.index(), explainRequest.type(), explainRequest.id(), "_explain"); Request request = new Request(HttpMethod.GET.name(), - endpoint(explainRequest.index(), explainRequest.type(), explainRequest.id(), "_explain")); + endpoint(explainRequest.index(), explainRequest.type(), explainRequest.id(), endpoint)); Params params = new Params(request); params.withStoredFields(explainRequest.storedFields()); diff --git a/src/test/java/org/springframework/data/elasticsearch/client/erhlc/ReactiveElasticsearchClientUnitTests.java b/src/test/java/org/springframework/data/elasticsearch/client/erhlc/ReactiveElasticsearchClientUnitTests.java index 2efaa20fb..4d714ebcb 100644 --- a/src/test/java/org/springframework/data/elasticsearch/client/erhlc/ReactiveElasticsearchClientUnitTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/client/erhlc/ReactiveElasticsearchClientUnitTests.java @@ -372,7 +372,7 @@ public class ReactiveElasticsearchClientUnitTests { .exchange(requestBodyUriSpec -> verify(requestBodyUriSpec).contentType(MediaType.APPLICATION_JSON)); URI uri = hostProvider.when(HOST).captureUri(); - assertThat(uri.getRawPath()).isEqualTo("/twitter/_doc/10/_create"); + assertThat(uri.getRawPath()).isEqualTo("/twitter/_create/10"); } @Test // DATAES-488 @@ -435,7 +435,7 @@ public class ReactiveElasticsearchClientUnitTests { hostProvider.when(HOST) // .receiveUpdateOk(); - client.update(new UpdateRequest("twitter", "doc", "1").doc(Collections.singletonMap("user", "cstrobl"))).then() // + client.update(new UpdateRequest("twitter", "1").doc(Collections.singletonMap("user", "cstrobl"))).then() // .as(StepVerifier::create) // .verifyComplete(); @@ -444,7 +444,7 @@ public class ReactiveElasticsearchClientUnitTests { .exchange(requestBodyUriSpec -> verify(requestBodyUriSpec).contentType(MediaType.APPLICATION_JSON)); URI uri = hostProvider.when(HOST).captureUri(); - assertThat(uri.getRawPath()).isEqualTo("/twitter/doc/1/_update"); + assertThat(uri.getRawPath()).isEqualTo("/twitter/_update/1"); } @Test // DATAES-488