Skip to content

Commit aca34ee

Browse files
committed
Fix @query method implementation for unpaged queries.
Original Pull Request #1919 Closes #1917 (cherry picked from commit e717586) (cherry picked from commit 2dd0a67)
1 parent 1348ee3 commit aca34ee

File tree

3 files changed

+53
-15
lines changed

3 files changed

+53
-15
lines changed

src/main/java/org/springframework/data/elasticsearch/repository/query/ElasticsearchStringQuery.java

+4-8
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
package org.springframework.data.elasticsearch.repository.query;
1717

1818
import org.springframework.data.domain.PageRequest;
19+
import org.springframework.data.domain.Pageable;
1920
import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
2021
import org.springframework.data.elasticsearch.core.SearchHitSupport;
2122
import org.springframework.data.elasticsearch.core.SearchHits;
@@ -73,16 +74,11 @@ public Object execute(Object[] parameters) {
7374
.unwrapSearchHits(SearchHitSupport.searchPageFor(searchHits, stringQuery.getPageable()));
7475
}
7576
} else if (queryMethod.isStreamQuery()) {
76-
if (accessor.getPageable().isUnpaged()) {
77-
stringQuery.setPageable(PageRequest.of(0, DEFAULT_STREAM_BATCH_SIZE));
78-
} else {
79-
stringQuery.setPageable(accessor.getPageable());
80-
}
77+
stringQuery.setPageable(
78+
accessor.getPageable().isPaged() ? accessor.getPageable() : PageRequest.of(0, DEFAULT_STREAM_BATCH_SIZE));
8179
result = StreamUtils.createStreamFromIterator(elasticsearchOperations.searchForStream(stringQuery, clazz, index));
8280
} else if (queryMethod.isCollectionQuery()) {
83-
if (accessor.getPageable().isPaged()) {
84-
stringQuery.setPageable(accessor.getPageable());
85-
}
81+
stringQuery.setPageable(accessor.getPageable().isPaged() ? accessor.getPageable() : Pageable.unpaged());
8682
result = elasticsearchOperations.search(stringQuery, clazz, index);
8783
} else {
8884
result = elasticsearchOperations.searchOne(stringQuery, clazz, index);

src/test/java/org/springframework/data/elasticsearch/repositories/custommethod/CustomMethodRepositoryBaseTests.java

+17-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2013-2020 the original author or authors.
2+
* Copyright 2013-2021 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -1587,6 +1587,19 @@ void shouldReturnSearchPageWithQuery() {
15871587
assertThat((nextPageable.getPageNumber())).isEqualTo(1);
15881588
}
15891589

1590+
@Test // #1917
1591+
void shouldReturnAllDocumentsWithUnpagedQuery() {
1592+
1593+
List<SampleEntity> entities = createSampleEntities("abc", 20);
1594+
repository.saveAll(entities);
1595+
1596+
SearchHits<SampleEntity> searchHits = repository.searchWithQueryByMessageUnpaged("Message");
1597+
1598+
assertThat(searchHits).isNotNull();
1599+
assertThat((searchHits.getTotalHits())).isEqualTo(20);
1600+
assertThat(searchHits.getSearchHits()).hasSize(20);
1601+
}
1602+
15901603
private List<SampleEntity> createSampleEntities(String type, int numberOfEntities) {
15911604

15921605
List<SampleEntity> entities = new ArrayList<>();
@@ -1766,6 +1779,9 @@ public interface SampleCustomMethodRepository extends ElasticsearchRepository<Sa
17661779

17671780
@Query("{\"match\": {\"message\": \"?0\"}}")
17681781
SearchPage<SampleEntity> searchWithQueryByMessage(String message, Pageable pageable);
1782+
1783+
@Query("{\"match\": {\"message\": \"?0\"}}")
1784+
SearchHits<SampleEntity> searchWithQueryByMessageUnpaged(String message);
17691785
}
17701786

17711787
/**

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

+32-6
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import java.lang.Long;
3232
import java.util.Arrays;
3333
import java.util.List;
34+
import java.util.stream.Collectors;
3435
import java.util.stream.IntStream;
3536

3637
import org.elasticsearch.ElasticsearchStatusException;
@@ -515,16 +516,38 @@ public void derivedFinderMethodReturningMonoShouldBeExecutedCorrectly() {
515516
}
516517

517518
@Test // DATAES-519
518-
public void annotatedFinderMethodShouldBeExecutedCorrectly() {
519+
void annotatedFinderMethodShouldBeExecutedCorrectly() {
519520

520-
bulkIndex(SampleEntity.builder().id("id-one").message("message").build(), //
521-
SampleEntity.builder().id("id-two").message("test message").build(), //
522-
SampleEntity.builder().id("id-three").message("test test").build()) //
523-
.block();
521+
int count = 30;
522+
SampleEntity[] sampleEntities = IntStream.range(1, count + 1)
523+
.mapToObj(i -> SampleEntity.builder().id("id-" + i).message("test " + i).build()).collect(Collectors.toList())
524+
.toArray(new SampleEntity[count]);
525+
526+
bulkIndex(sampleEntities).block();
524527

525528
repository.findAllViaAnnotatedQueryByMessageLike("test") //
526529
.as(StepVerifier::create) //
527-
.expectNextCount(2) //
530+
.expectNextCount(count) //
531+
.verifyComplete();
532+
}
533+
534+
@Test // #1917
535+
void annotatedFinderMethodPagedShouldBeExecutedCorrectly() {
536+
537+
int count = 30;
538+
SampleEntity[] sampleEntities = IntStream.range(1, count + 1)
539+
.mapToObj(i -> SampleEntity.builder().id("id-" + i).message("test " + i).build()).collect(Collectors.toList())
540+
.toArray(new SampleEntity[count]);
541+
542+
bulkIndex(sampleEntities).block();
543+
544+
repository.findAllViaAnnotatedQueryByMessageLikePaged("test", PageRequest.of(0, 20)) //
545+
.as(StepVerifier::create) //
546+
.expectNextCount(20) //
547+
.verifyComplete();
548+
repository.findAllViaAnnotatedQueryByMessageLikePaged("test", PageRequest.of(1, 20)) //
549+
.as(StepVerifier::create) //
550+
.expectNextCount(10) //
528551
.verifyComplete();
529552
}
530553

@@ -572,6 +595,9 @@ interface ReactiveSampleEntityRepository extends ReactiveCrudRepository<SampleEn
572595
@Query("{ \"bool\" : { \"must\" : { \"term\" : { \"message\" : \"?0\" } } } }")
573596
Flux<SampleEntity> findAllViaAnnotatedQueryByMessageLike(String message);
574597

598+
@Query("{ \"bool\" : { \"must\" : { \"term\" : { \"message\" : \"?0\" } } } }")
599+
Flux<SampleEntity> findAllViaAnnotatedQueryByMessageLikePaged(String message, Pageable pageable);
600+
575601
Mono<SampleEntity> findFirstByMessageLike(String message);
576602

577603
Mono<Long> countAllByMessage(String message);

0 commit comments

Comments
 (0)