From be0327894abc9be4e35267fb476a2d42bf87e42d Mon Sep 17 00:00:00 2001 From: Scooby Date: Wed, 28 Dec 2022 02:53:51 +0800 Subject: [PATCH] IndexQuery's id get ignored in bulkIndexOperation. Original Pull Request #2407 Closdes #2405 (cherry picked from commit 4d7d0955f91d6114a89d2bea804bb80685d81501) --- .../client/elc/RequestConverter.java | 7 ++++--- .../core/ElasticsearchIntegrationTests.java | 21 +++++++++++++++++++ 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/springframework/data/elasticsearch/client/elc/RequestConverter.java b/src/main/java/org/springframework/data/elasticsearch/client/elc/RequestConverter.java index a1d987b97..5f0210349 100644 --- a/src/main/java/org/springframework/data/elasticsearch/client/elc/RequestConverter.java +++ b/src/main/java/org/springframework/data/elasticsearch/client/elc/RequestConverter.java @@ -132,6 +132,7 @@ import org.springframework.util.StringUtils; * @author Peter-Josef Meisch * @author Sascha Woo * @author cdalxndr + * @author scoobyzhang * @since 4.4 */ class RequestConverter { @@ -476,7 +477,7 @@ class RequestConverter { Object queryObject = query.getObject(); if (queryObject != null) { - String id = !StringUtils.hasText(query.getId()) ? getPersistentEntityId(queryObject) : query.getId(); + String id = StringUtils.hasText(query.getId()) ? query.getId() : getPersistentEntityId(queryObject); builder // .id(id) // .document(elasticsearchConverter.mapObject(queryObject)); @@ -528,7 +529,7 @@ class RequestConverter { Object queryObject = query.getObject(); if (queryObject != null) { - String id = StringUtils.hasText(query.getId()) ? getPersistentEntityId(queryObject) : query.getId(); + String id = StringUtils.hasText(query.getId()) ? query.getId() : getPersistentEntityId(queryObject); builder // .id(id) // .document(elasticsearchConverter.mapObject(queryObject)); @@ -569,7 +570,7 @@ class RequestConverter { Object queryObject = query.getObject(); if (queryObject != null) { - String id = StringUtils.hasText(query.getId()) ? getPersistentEntityId(queryObject) : query.getId(); + String id = StringUtils.hasText(query.getId()) ? query.getId() : getPersistentEntityId(queryObject); builder // .id(id) // .document(elasticsearchConverter.mapObject(queryObject)); diff --git a/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchIntegrationTests.java b/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchIntegrationTests.java index f145ee774..aa4b3531e 100755 --- a/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchIntegrationTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchIntegrationTests.java @@ -128,6 +128,7 @@ import org.springframework.lang.Nullable; * @author Peer Mueller * @author Sijia Liu * @author Haibo Liu + * @author scoobyzhang */ @SpringIntegrationTest public abstract class ElasticsearchIntegrationTests { @@ -215,6 +216,26 @@ public abstract class ElasticsearchIntegrationTests { assertThatThrownBy(() -> operations.update(sampleEntity)).isInstanceOf(DataAccessException.class); } + @Test // #2405 + public void shouldNotIgnoreIdFromIndexQuery() { + String indexName = indexNameProvider.indexName(); + IndexCoordinates indexCoordinates = IndexCoordinates.of(indexName); + + SampleEntity object1 = SampleEntity.builder().id("objectId1").message("objectMessage1").build(); + SampleEntity object2 = SampleEntity.builder().id("objectId2").message("objectMessage2").build(); + List indexQueries = Arrays.asList( + new IndexQueryBuilder().withIndex(indexName).withId("idFromQuery1").withObject(object1) + .withOpType(IndexQuery.OpType.INDEX).build(), + new IndexQueryBuilder().withIndex(indexName).withId("idFromQuery2").withObject(object2) + .withOpType(IndexQuery.OpType.CREATE).build()); + operations.bulkIndex(indexQueries, indexCoordinates); + + boolean foundObject1 = operations.exists("idFromQuery1", indexCoordinates); + assertThat(foundObject1).isTrue(); + boolean foundObject2 = operations.exists("idFromQuery2", indexCoordinates); + assertThat(foundObject2).isTrue(); + } + @Test public void shouldThrowDataAccessExceptionIfDocumentDoesNotExistWhileDoingPartialUpdate() {