IndexQuery's id get ignored in bulkIndexOperation.

Original Pull Request #2407
Closdes #2405

(cherry picked from commit 4d7d0955f91d6114a89d2bea804bb80685d81501)
This commit is contained in:
Scooby 2022-12-28 02:53:51 +08:00 committed by Peter-Josef Meisch
parent 4bf1435555
commit be0327894a
No known key found for this signature in database
GPG Key ID: DE108246970C7708
2 changed files with 25 additions and 3 deletions

View File

@ -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));

View File

@ -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<IndexQuery> 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() {