Skip to content

Commit 28489ff

Browse files
authored
findAllById returns all requested documents.
Original Pull Request #2421 Closes #2417
1 parent 605c83f commit 28489ff

File tree

3 files changed

+42
-33
lines changed

3 files changed

+42
-33
lines changed

src/main/java/org/springframework/data/elasticsearch/repository/support/SimpleElasticsearchRepository.java

+6-6
Original file line numberDiff line numberDiff line change
@@ -147,9 +147,11 @@ public Iterable<T> findAllById(Iterable<ID> ids) {
147147

148148
Assert.notNull(ids, "ids can't be null.");
149149

150-
List<T> result = new ArrayList<>();
151-
Query query = getIdQuery(ids);
152-
150+
List<String> stringIds = stringIdsRepresentation(ids);
151+
Query query = getIdQuery(stringIds);
152+
if (!stringIds.isEmpty()) {
153+
query.setPageable(PageRequest.of(0, stringIds.size()));
154+
}
153155
List<SearchHit<T>> searchHitList = execute(
154156
operations -> operations.search(query, entityClass, getIndexCoordinates()).getSearchHits());
155157
// noinspection ConstantConditions
@@ -320,9 +322,7 @@ private IndexCoordinates getIndexCoordinates() {
320322
return operations.getIndexCoordinatesFor(entityClass);
321323
}
322324

323-
private Query getIdQuery(Iterable<? extends ID> ids) {
324-
List<String> stringIds = stringIdsRepresentation(ids);
325-
325+
private Query getIdQuery(List<String> stringIds) {
326326
return operations.idsQuery(stringIds);
327327
}
328328
// endregion

src/test/java/org/springframework/data/elasticsearch/repository/support/ElasticsearchRepositoryIntegrationTests.java

+17-19
Original file line numberDiff line numberDiff line change
@@ -203,29 +203,27 @@ void shouldDeleteDocument() {
203203
assertThat(entityFromElasticSearch).isNotPresent();
204204
}
205205

206-
@Test // DATAES-82
206+
@Test // DATAES-82, #2417
207207
void shouldFindAllByIdQuery() {
208208

209-
// given
210-
String documentId = nextIdAsString();
211-
SampleEntity sampleEntity = new SampleEntity();
212-
sampleEntity.setId(documentId);
213-
sampleEntity.setMessage("hello world.");
214-
sampleEntity.setVersion(System.currentTimeMillis());
215-
repository.save(sampleEntity);
216-
217-
String documentId2 = nextIdAsString();
218-
SampleEntity sampleEntity2 = new SampleEntity();
219-
sampleEntity2.setId(documentId2);
220-
sampleEntity2.setMessage("hello world.");
221-
sampleEntity2.setVersion(System.currentTimeMillis());
222-
repository.save(sampleEntity2);
209+
// create more than 10 documents to see that the number of input ids is set as requested size
210+
int numEntities = 20;
211+
List<String> ids = new ArrayList<>(numEntities);
212+
List<SampleEntity> entities = new ArrayList<>(numEntities);
213+
for (int i = 0; i < numEntities; i++) {
214+
String documentId = nextIdAsString();
215+
ids.add(documentId);
216+
SampleEntity sampleEntity = new SampleEntity();
217+
sampleEntity.setId(documentId);
218+
sampleEntity.setMessage("hello world.");
219+
sampleEntity.setVersion(System.currentTimeMillis());
220+
entities.add(sampleEntity);
221+
}
222+
repository.saveAll(entities);
223223

224-
// when
225-
Iterable<SampleEntity> sampleEntities = repository.findAllById(Arrays.asList(documentId, documentId2));
224+
Iterable<SampleEntity> sampleEntities = repository.findAllById(ids);
226225

227-
// then
228-
assertThat(sampleEntities).isNotNull().hasSize(2);
226+
assertThat(sampleEntities).isNotNull().hasSize(numEntities);
229227
}
230228

231229
@Test

src/test/java/org/springframework/data/elasticsearch/repository/support/SimpleReactiveElasticsearchRepositoryIntegrationTests.java

+19-8
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,13 @@
1717

1818
import static org.assertj.core.api.Assertions.*;
1919
import static org.springframework.data.elasticsearch.core.query.Query.*;
20+
import static org.springframework.data.elasticsearch.utils.IdGenerator.*;
2021

2122
import reactor.core.publisher.Flux;
2223
import reactor.core.publisher.Mono;
2324
import reactor.test.StepVerifier;
2425

26+
import java.util.ArrayList;
2527
import java.util.Arrays;
2628
import java.util.Collection;
2729
import java.util.Collections;
@@ -164,18 +166,27 @@ void findAllByIdByIdShouldCompleteIfIndexDoesNotExist() {
164166
repository.findAllById(Arrays.asList("id-two", "id-two")).as(StepVerifier::create).verifyComplete();
165167
}
166168

167-
@Test // DATAES-519
169+
@Test // DATAES-519, #2417
168170
void findAllByIdShouldRetrieveMatchingDocuments() {
169171

170-
bulkIndex(new SampleEntity("id-one"), //
171-
new SampleEntity("id-two"), //
172-
new SampleEntity("id-three")) //
173-
.block();
172+
// create more than 10 documents to see that the number of input ids is set as requested size
173+
int numEntities = 20;
174+
List<String> ids = new ArrayList<>(numEntities);
175+
List<SampleEntity> entities = new ArrayList<>(numEntities);
176+
for (int i = 0; i < numEntities; i++) {
177+
String documentId = nextIdAsString();
178+
ids.add(documentId);
179+
SampleEntity sampleEntity = new SampleEntity();
180+
sampleEntity.setId(documentId);
181+
sampleEntity.setMessage("hello world.");
182+
sampleEntity.setVersion(System.currentTimeMillis());
183+
entities.add(sampleEntity);
184+
}
185+
repository.saveAll(entities).blockLast();
174186

175-
repository.findAllById(Arrays.asList("id-one", "id-two")) //
187+
repository.findAllById(ids) //
176188
.as(StepVerifier::create)//
177-
.expectNextMatches(entity -> entity.getId().equals("id-one") || entity.getId().equals("id-two")) //
178-
.expectNextMatches(entity -> entity.getId().equals("id-one") || entity.getId().equals("id-two")) //
189+
.expectNextCount(numEntities) //
179190
.verifyComplete();
180191
}
181192

0 commit comments

Comments
 (0)