mirror of
https://github.com/spring-projects/spring-data-elasticsearch.git
synced 2025-07-05 18:22:23 +00:00
Fix @Query method implementation for unpaged queries.
Original Pull Request #1919 Closes #1917
This commit is contained in:
parent
35c7ef4fed
commit
e71758686c
@ -16,6 +16,7 @@
|
|||||||
package org.springframework.data.elasticsearch.repository.query;
|
package org.springframework.data.elasticsearch.repository.query;
|
||||||
|
|
||||||
import org.springframework.data.domain.PageRequest;
|
import org.springframework.data.domain.PageRequest;
|
||||||
|
import org.springframework.data.domain.Pageable;
|
||||||
import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
|
import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
|
||||||
import org.springframework.data.elasticsearch.core.SearchHitSupport;
|
import org.springframework.data.elasticsearch.core.SearchHitSupport;
|
||||||
import org.springframework.data.elasticsearch.core.SearchHits;
|
import org.springframework.data.elasticsearch.core.SearchHits;
|
||||||
@ -81,16 +82,11 @@ public class ElasticsearchStringQuery extends AbstractElasticsearchRepositoryQue
|
|||||||
.unwrapSearchHits(SearchHitSupport.searchPageFor(searchHits, stringQuery.getPageable()));
|
.unwrapSearchHits(SearchHitSupport.searchPageFor(searchHits, stringQuery.getPageable()));
|
||||||
}
|
}
|
||||||
} else if (queryMethod.isStreamQuery()) {
|
} else if (queryMethod.isStreamQuery()) {
|
||||||
if (accessor.getPageable().isUnpaged()) {
|
stringQuery.setPageable(
|
||||||
stringQuery.setPageable(PageRequest.of(0, DEFAULT_STREAM_BATCH_SIZE));
|
accessor.getPageable().isPaged() ? accessor.getPageable() : PageRequest.of(0, DEFAULT_STREAM_BATCH_SIZE));
|
||||||
} else {
|
|
||||||
stringQuery.setPageable(accessor.getPageable());
|
|
||||||
}
|
|
||||||
result = StreamUtils.createStreamFromIterator(elasticsearchOperations.searchForStream(stringQuery, clazz, index));
|
result = StreamUtils.createStreamFromIterator(elasticsearchOperations.searchForStream(stringQuery, clazz, index));
|
||||||
} else if (queryMethod.isCollectionQuery()) {
|
} else if (queryMethod.isCollectionQuery()) {
|
||||||
if (accessor.getPageable().isPaged()) {
|
stringQuery.setPageable(accessor.getPageable().isPaged() ? accessor.getPageable() : Pageable.unpaged());
|
||||||
stringQuery.setPageable(accessor.getPageable());
|
|
||||||
}
|
|
||||||
result = elasticsearchOperations.search(stringQuery, clazz, index);
|
result = elasticsearchOperations.search(stringQuery, clazz, index);
|
||||||
} else {
|
} else {
|
||||||
result = elasticsearchOperations.searchOne(stringQuery, clazz, index);
|
result = elasticsearchOperations.searchOne(stringQuery, clazz, index);
|
||||||
|
@ -1612,19 +1612,18 @@ public abstract class CustomMethodRepositoryBaseTests {
|
|||||||
assertThat((nextPageable.getPageNumber())).isEqualTo(1);
|
assertThat((nextPageable.getPageNumber())).isEqualTo(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<SampleEntity> createSampleEntities(String type, int numberOfEntities) {
|
@Test // #1917
|
||||||
|
@DisplayName("shouldReturnAllDocumentsWithUnpagedQuery")
|
||||||
|
void shouldReturnAllDocumentsWithUnpagedQuery() {
|
||||||
|
|
||||||
List<SampleEntity> entities = new ArrayList<>();
|
List<SampleEntity> entities = createSampleEntities("abc", 20);
|
||||||
for (int i = 0; i < numberOfEntities; i++) {
|
repository.saveAll(entities);
|
||||||
SampleEntity entity = new SampleEntity();
|
|
||||||
entity.setId(UUID.randomUUID().toString());
|
|
||||||
entity.setAvailable(true);
|
|
||||||
entity.setMessage("Message");
|
|
||||||
entity.setType(type);
|
|
||||||
entities.add(entity);
|
|
||||||
}
|
|
||||||
|
|
||||||
return entities;
|
SearchHits<SampleEntity> searchHits = repository.searchWithQueryByMessageUnpaged("Message");
|
||||||
|
|
||||||
|
assertThat(searchHits).isNotNull();
|
||||||
|
assertThat((searchHits.getTotalHits())).isEqualTo(20);
|
||||||
|
assertThat(searchHits.getSearchHits()).hasSize(20);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test // DATAES-891
|
@Test // DATAES-891
|
||||||
@ -1649,6 +1648,21 @@ public abstract class CustomMethodRepositoryBaseTests {
|
|||||||
assertThat(count).isEqualTo(20);
|
assertThat(count).isEqualTo(20);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private List<SampleEntity> createSampleEntities(String type, int numberOfEntities) {
|
||||||
|
|
||||||
|
List<SampleEntity> entities = new ArrayList<>();
|
||||||
|
for (int i = 0; i < numberOfEntities; i++) {
|
||||||
|
SampleEntity entity = new SampleEntity();
|
||||||
|
entity.setId(UUID.randomUUID().toString());
|
||||||
|
entity.setAvailable(true);
|
||||||
|
entity.setMessage("Message");
|
||||||
|
entity.setType(type);
|
||||||
|
entities.add(entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
return entities;
|
||||||
|
}
|
||||||
|
|
||||||
@Document(indexName = "#{@indexNameProvider.indexName()}")
|
@Document(indexName = "#{@indexNameProvider.indexName()}")
|
||||||
static class SampleEntity {
|
static class SampleEntity {
|
||||||
@Nullable @Id private String id;
|
@Nullable @Id private String id;
|
||||||
@ -1857,6 +1871,9 @@ public abstract class CustomMethodRepositoryBaseTests {
|
|||||||
@Query("{\"match\": {\"message\": \"?0\"}}")
|
@Query("{\"match\": {\"message\": \"?0\"}}")
|
||||||
SearchPage<SampleEntity> searchWithQueryByMessage(String message, Pageable pageable);
|
SearchPage<SampleEntity> searchWithQueryByMessage(String message, Pageable pageable);
|
||||||
|
|
||||||
|
@Query("{\"match\": {\"message\": \"?0\"}}")
|
||||||
|
SearchHits<SampleEntity> searchWithQueryByMessageUnpaged(String message);
|
||||||
|
|
||||||
@CountQuery("{\"bool\" : {\"must\" : {\"term\" : {\"type\" : \"?0\"}}}}")
|
@CountQuery("{\"bool\" : {\"must\" : {\"term\" : {\"type\" : \"?0\"}}}}")
|
||||||
long countWithQueryByType(String type);
|
long countWithQueryByType(String type);
|
||||||
}
|
}
|
||||||
|
@ -28,6 +28,7 @@ import java.lang.Long;
|
|||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
import java.util.stream.IntStream;
|
import java.util.stream.IntStream;
|
||||||
|
|
||||||
import org.elasticsearch.ElasticsearchStatusException;
|
import org.elasticsearch.ElasticsearchStatusException;
|
||||||
@ -541,14 +542,36 @@ class SimpleReactiveElasticsearchRepositoryTests {
|
|||||||
@Test // DATAES-519
|
@Test // DATAES-519
|
||||||
void annotatedFinderMethodShouldBeExecutedCorrectly() {
|
void annotatedFinderMethodShouldBeExecutedCorrectly() {
|
||||||
|
|
||||||
bulkIndex(new SampleEntity("id-one", "message"), //
|
int count = 30;
|
||||||
new SampleEntity("id-two", "test message"), //
|
SampleEntity[] sampleEntities = IntStream.range(1, count + 1)
|
||||||
new SampleEntity("id-three", "test test")) //
|
.mapToObj(i -> new SampleEntity("id-" + i, "test " + i)).collect(Collectors.toList())
|
||||||
.block();
|
.toArray(new SampleEntity[count]);
|
||||||
|
|
||||||
|
bulkIndex(sampleEntities).block();
|
||||||
|
|
||||||
repository.findAllViaAnnotatedQueryByMessageLike("test") //
|
repository.findAllViaAnnotatedQueryByMessageLike("test") //
|
||||||
.as(StepVerifier::create) //
|
.as(StepVerifier::create) //
|
||||||
.expectNextCount(2) //
|
.expectNextCount(count) //
|
||||||
|
.verifyComplete();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test // #1917
|
||||||
|
void annotatedFinderMethodPagedShouldBeExecutedCorrectly() {
|
||||||
|
|
||||||
|
int count = 30;
|
||||||
|
SampleEntity[] sampleEntities = IntStream.range(1, count + 1)
|
||||||
|
.mapToObj(i -> new SampleEntity("id-" + i, "test " + i)).collect(Collectors.toList())
|
||||||
|
.toArray(new SampleEntity[count]);
|
||||||
|
|
||||||
|
bulkIndex(sampleEntities).block();
|
||||||
|
|
||||||
|
repository.findAllViaAnnotatedQueryByMessageLikePaged("test", PageRequest.of(0, 20)) //
|
||||||
|
.as(StepVerifier::create) //
|
||||||
|
.expectNextCount(20) //
|
||||||
|
.verifyComplete();
|
||||||
|
repository.findAllViaAnnotatedQueryByMessageLikePaged("test", PageRequest.of(1, 20)) //
|
||||||
|
.as(StepVerifier::create) //
|
||||||
|
.expectNextCount(10) //
|
||||||
.verifyComplete();
|
.verifyComplete();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -596,6 +619,9 @@ class SimpleReactiveElasticsearchRepositoryTests {
|
|||||||
@Query("{ \"bool\" : { \"must\" : { \"term\" : { \"message\" : \"?0\" } } } }")
|
@Query("{ \"bool\" : { \"must\" : { \"term\" : { \"message\" : \"?0\" } } } }")
|
||||||
Flux<SampleEntity> findAllViaAnnotatedQueryByMessageLike(String message);
|
Flux<SampleEntity> findAllViaAnnotatedQueryByMessageLike(String message);
|
||||||
|
|
||||||
|
@Query("{ \"bool\" : { \"must\" : { \"term\" : { \"message\" : \"?0\" } } } }")
|
||||||
|
Flux<SampleEntity> findAllViaAnnotatedQueryByMessageLikePaged(String message, Pageable pageable);
|
||||||
|
|
||||||
Mono<SampleEntity> findFirstByMessageLike(String message);
|
Mono<SampleEntity> findFirstByMessageLike(String message);
|
||||||
|
|
||||||
Mono<Long> countAllByMessage(String message);
|
Mono<Long> countAllByMessage(String message);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user