Skip to content

Commit 4d7d095

Browse files
authored
IndexQuery's id get ignored in bulkIndexOperation.
Original Pull Request #2407 Closdes #2405
1 parent 2fb9062 commit 4d7d095

File tree

2 files changed

+25
-3
lines changed

2 files changed

+25
-3
lines changed

src/main/java/org/springframework/data/elasticsearch/client/elc/RequestConverter.java

+4-3
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@
9696
* @author Peter-Josef Meisch
9797
* @author Sascha Woo
9898
* @author cdalxndr
99+
* @author scoobyzhang
99100
* @since 4.4
100101
*/
101102
class RequestConverter {
@@ -440,7 +441,7 @@ public IndexRequest<?> documentIndexRequest(IndexQuery query, IndexCoordinates i
440441
Object queryObject = query.getObject();
441442

442443
if (queryObject != null) {
443-
String id = !StringUtils.hasText(query.getId()) ? getPersistentEntityId(queryObject) : query.getId();
444+
String id = StringUtils.hasText(query.getId()) ? query.getId() : getPersistentEntityId(queryObject);
444445
builder //
445446
.id(id) //
446447
.document(elasticsearchConverter.mapObject(queryObject));
@@ -492,7 +493,7 @@ private IndexOperation<?> bulkIndexOperation(IndexQuery query, IndexCoordinates
492493
Object queryObject = query.getObject();
493494

494495
if (queryObject != null) {
495-
String id = StringUtils.hasText(query.getId()) ? getPersistentEntityId(queryObject) : query.getId();
496+
String id = StringUtils.hasText(query.getId()) ? query.getId() : getPersistentEntityId(queryObject);
496497
builder //
497498
.id(id) //
498499
.document(elasticsearchConverter.mapObject(queryObject));
@@ -533,7 +534,7 @@ private CreateOperation<?> bulkCreateOperation(IndexQuery query, IndexCoordinate
533534
Object queryObject = query.getObject();
534535

535536
if (queryObject != null) {
536-
String id = StringUtils.hasText(query.getId()) ? getPersistentEntityId(queryObject) : query.getId();
537+
String id = StringUtils.hasText(query.getId()) ? query.getId() : getPersistentEntityId(queryObject);
537538
builder //
538539
.id(id) //
539540
.document(elasticsearchConverter.mapObject(queryObject));

src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchIntegrationTests.java

+21
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,7 @@
128128
* @author Peer Mueller
129129
* @author Sijia Liu
130130
* @author Haibo Liu
131+
* @author scoobyzhang
131132
*/
132133
@SpringIntegrationTest
133134
public abstract class ElasticsearchIntegrationTests {
@@ -215,6 +216,26 @@ public void shouldThrowDataAccessExceptionIfDocumentDoesNotExistWhileDoingPartia
215216
assertThatThrownBy(() -> operations.update(sampleEntity)).isInstanceOf(DataAccessException.class);
216217
}
217218

219+
@Test // #2405
220+
public void shouldNotIgnoreIdFromIndexQuery() {
221+
String indexName = indexNameProvider.indexName();
222+
IndexCoordinates indexCoordinates = IndexCoordinates.of(indexName);
223+
224+
SampleEntity object1 = SampleEntity.builder().id("objectId1").message("objectMessage1").build();
225+
SampleEntity object2 = SampleEntity.builder().id("objectId2").message("objectMessage2").build();
226+
List<IndexQuery> indexQueries = Arrays.asList(
227+
new IndexQueryBuilder().withIndex(indexName).withId("idFromQuery1").withObject(object1)
228+
.withOpType(IndexQuery.OpType.INDEX).build(),
229+
new IndexQueryBuilder().withIndex(indexName).withId("idFromQuery2").withObject(object2)
230+
.withOpType(IndexQuery.OpType.CREATE).build());
231+
operations.bulkIndex(indexQueries, indexCoordinates);
232+
233+
boolean foundObject1 = operations.exists("idFromQuery1", indexCoordinates);
234+
assertThat(foundObject1).isTrue();
235+
boolean foundObject2 = operations.exists("idFromQuery2", indexCoordinates);
236+
assertThat(foundObject2).isTrue();
237+
}
238+
218239
@Test
219240
public void shouldThrowDataAccessExceptionIfDocumentDoesNotExistWhileDoingPartialUpdate() {
220241

0 commit comments

Comments
 (0)