diff --git a/src/main/java/org/springframework/data/elasticsearch/repository/support/SimpleElasticsearchRepository.java b/src/main/java/org/springframework/data/elasticsearch/repository/support/SimpleElasticsearchRepository.java index fb359f08d..763929e35 100644 --- a/src/main/java/org/springframework/data/elasticsearch/repository/support/SimpleElasticsearchRepository.java +++ b/src/main/java/org/springframework/data/elasticsearch/repository/support/SimpleElasticsearchRepository.java @@ -147,9 +147,11 @@ public Iterable findAllById(Iterable ids) { Assert.notNull(ids, "ids can't be null."); - List result = new ArrayList<>(); - Query query = getIdQuery(ids); - + List stringIds = stringIdsRepresentation(ids); + Query query = getIdQuery(stringIds); + if (!stringIds.isEmpty()) { + query.setPageable(PageRequest.of(0, stringIds.size())); + } List> searchHitList = execute( operations -> operations.search(query, entityClass, getIndexCoordinates()).getSearchHits()); // noinspection ConstantConditions @@ -320,9 +322,7 @@ private IndexCoordinates getIndexCoordinates() { return operations.getIndexCoordinatesFor(entityClass); } - private Query getIdQuery(Iterable ids) { - List stringIds = stringIdsRepresentation(ids); - + private Query getIdQuery(List stringIds) { return operations.idsQuery(stringIds); } // endregion diff --git a/src/test/java/org/springframework/data/elasticsearch/repository/support/ElasticsearchRepositoryIntegrationTests.java b/src/test/java/org/springframework/data/elasticsearch/repository/support/ElasticsearchRepositoryIntegrationTests.java index 7b28c01d4..6b0f39193 100644 --- a/src/test/java/org/springframework/data/elasticsearch/repository/support/ElasticsearchRepositoryIntegrationTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/repository/support/ElasticsearchRepositoryIntegrationTests.java @@ -203,29 +203,27 @@ void shouldDeleteDocument() { assertThat(entityFromElasticSearch).isNotPresent(); } - @Test // DATAES-82 + @Test // DATAES-82, #2417 void shouldFindAllByIdQuery() { - // given - String documentId = nextIdAsString(); - SampleEntity sampleEntity = new SampleEntity(); - sampleEntity.setId(documentId); - sampleEntity.setMessage("hello world."); - sampleEntity.setVersion(System.currentTimeMillis()); - repository.save(sampleEntity); - - String documentId2 = nextIdAsString(); - SampleEntity sampleEntity2 = new SampleEntity(); - sampleEntity2.setId(documentId2); - sampleEntity2.setMessage("hello world."); - sampleEntity2.setVersion(System.currentTimeMillis()); - repository.save(sampleEntity2); + // create more than 10 documents to see that the number of input ids is set as requested size + int numEntities = 20; + List ids = new ArrayList<>(numEntities); + List entities = new ArrayList<>(numEntities); + for (int i = 0; i < numEntities; i++) { + String documentId = nextIdAsString(); + ids.add(documentId); + SampleEntity sampleEntity = new SampleEntity(); + sampleEntity.setId(documentId); + sampleEntity.setMessage("hello world."); + sampleEntity.setVersion(System.currentTimeMillis()); + entities.add(sampleEntity); + } + repository.saveAll(entities); - // when - Iterable sampleEntities = repository.findAllById(Arrays.asList(documentId, documentId2)); + Iterable sampleEntities = repository.findAllById(ids); - // then - assertThat(sampleEntities).isNotNull().hasSize(2); + assertThat(sampleEntities).isNotNull().hasSize(numEntities); } @Test diff --git a/src/test/java/org/springframework/data/elasticsearch/repository/support/SimpleReactiveElasticsearchRepositoryIntegrationTests.java b/src/test/java/org/springframework/data/elasticsearch/repository/support/SimpleReactiveElasticsearchRepositoryIntegrationTests.java index 2e6603c34..0a8d72f8b 100644 --- a/src/test/java/org/springframework/data/elasticsearch/repository/support/SimpleReactiveElasticsearchRepositoryIntegrationTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/repository/support/SimpleReactiveElasticsearchRepositoryIntegrationTests.java @@ -17,11 +17,13 @@ import static org.assertj.core.api.Assertions.*; import static org.springframework.data.elasticsearch.core.query.Query.*; +import static org.springframework.data.elasticsearch.utils.IdGenerator.*; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import reactor.test.StepVerifier; +import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; @@ -164,18 +166,27 @@ void findAllByIdByIdShouldCompleteIfIndexDoesNotExist() { repository.findAllById(Arrays.asList("id-two", "id-two")).as(StepVerifier::create).verifyComplete(); } - @Test // DATAES-519 + @Test // DATAES-519, #2417 void findAllByIdShouldRetrieveMatchingDocuments() { - bulkIndex(new SampleEntity("id-one"), // - new SampleEntity("id-two"), // - new SampleEntity("id-three")) // - .block(); + // create more than 10 documents to see that the number of input ids is set as requested size + int numEntities = 20; + List ids = new ArrayList<>(numEntities); + List entities = new ArrayList<>(numEntities); + for (int i = 0; i < numEntities; i++) { + String documentId = nextIdAsString(); + ids.add(documentId); + SampleEntity sampleEntity = new SampleEntity(); + sampleEntity.setId(documentId); + sampleEntity.setMessage("hello world."); + sampleEntity.setVersion(System.currentTimeMillis()); + entities.add(sampleEntity); + } + repository.saveAll(entities).blockLast(); - repository.findAllById(Arrays.asList("id-one", "id-two")) // + repository.findAllById(ids) // .as(StepVerifier::create)// - .expectNextMatches(entity -> entity.getId().equals("id-one") || entity.getId().equals("id-two")) // - .expectNextMatches(entity -> entity.getId().equals("id-one") || entity.getId().equals("id-two")) // + .expectNextCount(numEntities) // .verifyComplete(); }