From 0522c36f450d089beccc9fb48f5e08bdc29fde17 Mon Sep 17 00:00:00 2001 From: scoobyzhang Date: Mon, 26 Dec 2022 21:14:05 +0800 Subject: [PATCH 1/2] fix bug: IndexQuery's id get ignored in bulkIndexOperation --- .../data/elasticsearch/client/elc/RequestConverter.java | 7 ++++--- 1 file changed, 4 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 dc33b4c79..95f294c18 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 @@ -96,6 +96,7 @@ * @author Peter-Josef Meisch * @author Sascha Woo * @author cdalxndr + * @author scoobyzhang * @since 4.4 */ class RequestConverter { @@ -440,7 +441,7 @@ public IndexRequest documentIndexRequest(IndexQuery query, IndexCoordinates i 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)); @@ -492,7 +493,7 @@ private IndexOperation bulkIndexOperation(IndexQuery query, IndexCoordinates 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)); @@ -533,7 +534,7 @@ private CreateOperation bulkCreateOperation(IndexQuery query, IndexCoordinate 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)); From d7b04e94bc19b98a589e3f09724e3398d5263dfa Mon Sep 17 00:00:00 2001 From: scoobyzhang Date: Tue, 27 Dec 2022 20:28:26 +0800 Subject: [PATCH 2/2] Add tests for issue #2405 --- .../core/ElasticsearchIntegrationTests.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) 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 @@ * @author Peer Mueller * @author Sijia Liu * @author Haibo Liu + * @author scoobyzhang */ @SpringIntegrationTest public abstract class ElasticsearchIntegrationTests { @@ -215,6 +216,26 @@ public void shouldThrowDataAccessExceptionIfDocumentDoesNotExistWhileDoingPartia 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() {