Skip to content

Commit 26a3b32

Browse files
committed
SearchPage result in StringQuery methods.
Original Pull Request #1812 Closes #1811 (cherry picked from commit e96d09f) (cherry picked from commit ad6022f)
1 parent 7526933 commit 26a3b32

File tree

2 files changed

+29
-6
lines changed

2 files changed

+29
-6
lines changed

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

+10-6
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.
@@ -15,19 +15,16 @@
1515
*/
1616
package org.springframework.data.elasticsearch.repository.query;
1717

18-
import org.springframework.core.convert.support.GenericConversionService;
1918
import org.springframework.data.domain.PageRequest;
2019
import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
2120
import org.springframework.data.elasticsearch.core.SearchHitSupport;
2221
import org.springframework.data.elasticsearch.core.SearchHits;
23-
import org.springframework.data.elasticsearch.core.convert.DateTimeConverters;
2422
import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates;
2523
import org.springframework.data.elasticsearch.core.query.StringQuery;
2624
import org.springframework.data.elasticsearch.repository.support.StringQueryUtil;
2725
import org.springframework.data.repository.query.ParametersParameterAccessor;
2826
import org.springframework.data.util.StreamUtils;
2927
import org.springframework.util.Assert;
30-
import org.springframework.util.ClassUtils;
3128

3229
/**
3330
* ElasticsearchStringQuery
@@ -69,7 +66,12 @@ public Object execute(Object[] parameters) {
6966
if (queryMethod.isPageQuery()) {
7067
stringQuery.setPageable(accessor.getPageable());
7168
SearchHits<?> searchHits = elasticsearchOperations.search(stringQuery, clazz, index);
72-
result = SearchHitSupport.page(searchHits, stringQuery.getPageable());
69+
if (queryMethod.isSearchPageMethod()) {
70+
result = SearchHitSupport.searchPageFor(searchHits, stringQuery.getPageable());
71+
} else {
72+
result = SearchHitSupport
73+
.unwrapSearchHits(SearchHitSupport.searchPageFor(searchHits, stringQuery.getPageable()));
74+
}
7375
} else if (queryMethod.isStreamQuery()) {
7476
if (accessor.getPageable().isUnpaged()) {
7577
stringQuery.setPageable(PageRequest.of(0, DEFAULT_STREAM_BATCH_SIZE));
@@ -86,7 +88,9 @@ public Object execute(Object[] parameters) {
8688
result = elasticsearchOperations.searchOne(stringQuery, clazz, index);
8789
}
8890

89-
return queryMethod.isNotSearchHitMethod() ? SearchHitSupport.unwrapSearchHits(result) : result;
91+
return (queryMethod.isNotSearchHitMethod() && !queryMethod.isSearchPageMethod())
92+
? SearchHitSupport.unwrapSearchHits(result)
93+
: result;
9094
}
9195

9296
protected StringQuery createQuery(ParametersParameterAccessor parameterAccessor) {

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

+19
Original file line numberDiff line numberDiff line change
@@ -1570,6 +1570,22 @@ void shouldReturnSearchPage() {
15701570
assertThat((nextPageable.getPageNumber())).isEqualTo(1);
15711571
}
15721572

1573+
@Test // #1811
1574+
void shouldReturnSearchPageWithQuery() {
1575+
List<SampleEntity> entities = createSampleEntities("abc", 20);
1576+
repository.saveAll(entities);
1577+
1578+
SearchPage<SampleEntity> searchPage = repository.searchWithQueryByMessage("Message", PageRequest.of(0, 10));
1579+
1580+
assertThat(searchPage).isNotNull();
1581+
SearchHits<SampleEntity> searchHits = searchPage.getSearchHits();
1582+
assertThat(searchHits).isNotNull();
1583+
assertThat((searchHits.getTotalHits())).isEqualTo(20);
1584+
assertThat(searchHits.getSearchHits()).hasSize(10);
1585+
Pageable nextPageable = searchPage.nextPageable();
1586+
assertThat((nextPageable.getPageNumber())).isEqualTo(1);
1587+
}
1588+
15731589
private List<SampleEntity> createSampleEntities(String type, int numberOfEntities) {
15741590

15751591
List<SampleEntity> entities = new ArrayList<>();
@@ -1746,6 +1762,9 @@ public interface SampleCustomMethodRepository extends ElasticsearchRepository<Sa
17461762
SearchHits<SampleEntity> searchBy(Sort sort);
17471763

17481764
SearchPage<SampleEntity> searchByMessage(String message, Pageable pageable);
1765+
1766+
@Query("{\"match\": {\"message\": \"?0\"}}")
1767+
SearchPage<SampleEntity> searchWithQueryByMessage(String message, Pageable pageable);
17491768
}
17501769

17511770
/**

0 commit comments

Comments
 (0)