Skip to content

Commit a5d9e92

Browse files
authored
DATAES-934 - Add a Query taking method to ElasticsearchRepository.
Original PR: #535
1 parent 8365812 commit a5d9e92

File tree

3 files changed

+47
-8
lines changed

3 files changed

+47
-8
lines changed

src/main/java/org/springframework/data/elasticsearch/repository/ElasticsearchRepository.java

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import org.springframework.data.domain.Page;
2020
import org.springframework.data.domain.Pageable;
2121
import org.springframework.data.elasticsearch.core.IndexOperations;
22+
import org.springframework.data.elasticsearch.core.SearchPage;
2223
import org.springframework.data.elasticsearch.core.query.Query;
2324
import org.springframework.data.repository.NoRepositoryBean;
2425
import org.springframework.data.repository.PagingAndSortingRepository;
@@ -55,23 +56,32 @@ default <S extends T> S index(S entity) {
5556
<S extends T> S indexWithoutRefresh(S entity);
5657

5758
/**
58-
* @deprecated since 4.0, use standard repository method naming or @{@link Query} annotated methods, or
59-
* {@link org.springframework.data.elasticsearch.core.ElasticsearchOperations}.
59+
* @deprecated since 4.0, use {@link #searchQuery(Query)}, standard repository method naming or @{@link Query}
60+
* annotated methods, or {@link org.springframework.data.elasticsearch.core.ElasticsearchOperations}.
6061
*/
62+
@Deprecated
6163
Iterable<T> search(QueryBuilder query);
6264

6365
/**
64-
* @deprecated since 4.0, use standard repository method naming or @{@link Query} annotated methods, or
65-
* {@link org.springframework.data.elasticsearch.core.ElasticsearchOperations}.
66+
* @deprecated since 4.0, use {@link #searchQuery(Query)}, standard repository method naming or @{@link Query}
67+
* annotated methods, or {@link org.springframework.data.elasticsearch.core.ElasticsearchOperations}.
6668
*/
69+
@Deprecated
6770
Page<T> search(QueryBuilder query, Pageable pageable);
6871

6972
/**
70-
* @deprecated since 4.0, use standard repository method naming or @{@link Query} annotated methods, or
71-
* {@link org.springframework.data.elasticsearch.core.ElasticsearchOperations}.
73+
* @deprecated since 4.0, use {@link #searchQuery(Query)}, standard repository method naming or @{@link Query}
74+
* annotated methods, or {@link org.springframework.data.elasticsearch.core.ElasticsearchOperations}.
7275
*/
7376
Page<T> search(Query searchQuery);
7477

78+
/**
79+
* execute the given query and return the result in a SearchPage.
80+
*
81+
* @since 4.1
82+
*/
83+
SearchPage<T> searchQuery(Query query);
84+
7585
/**
7686
* Search for similar entities using a morelikethis query
7787
*

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import org.springframework.data.elasticsearch.core.SearchHit;
3838
import org.springframework.data.elasticsearch.core.SearchHitSupport;
3939
import org.springframework.data.elasticsearch.core.SearchHits;
40+
import org.springframework.data.elasticsearch.core.SearchPage;
4041
import org.springframework.data.elasticsearch.core.aggregation.AggregatedPage;
4142
import org.springframework.data.elasticsearch.core.mapping.ElasticsearchPersistentEntity;
4243
import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates;
@@ -252,6 +253,12 @@ public Page<T> search(Query query) {
252253
return (Page<T>) SearchHitSupport.unwrapSearchHits(page);
253254
}
254255

256+
@Override
257+
public SearchPage<T> searchQuery(Query query) {
258+
SearchHits<T> searchHits = execute(operations -> operations.search(query, entityClass, getIndexCoordinates()));
259+
return SearchHitSupport.searchPageFor(searchHits, query.getPageable());
260+
}
261+
255262
@SuppressWarnings("unchecked")
256263
@Override
257264
public Page<T> searchSimilar(T entity, @Nullable String[] fields, Pageable pageable) {
Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636

3737
import org.junit.jupiter.api.AfterEach;
3838
import org.junit.jupiter.api.BeforeEach;
39+
import org.junit.jupiter.api.DisplayName;
3940
import org.junit.jupiter.api.Test;
4041
import org.springframework.beans.factory.annotation.Autowired;
4142
import org.springframework.context.annotation.Configuration;
@@ -51,6 +52,9 @@
5152
import org.springframework.data.elasticsearch.annotations.Field;
5253
import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
5354
import org.springframework.data.elasticsearch.core.IndexOperations;
55+
import org.springframework.data.elasticsearch.core.SearchPage;
56+
import org.springframework.data.elasticsearch.core.query.Criteria;
57+
import org.springframework.data.elasticsearch.core.query.CriteriaQuery;
5458
import org.springframework.data.elasticsearch.core.query.NativeSearchQuery;
5559
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
5660
import org.springframework.data.elasticsearch.junit.jupiter.ElasticsearchRestTemplateConfiguration;
@@ -71,8 +75,8 @@
7175
* @author Murali Chevuri
7276
*/
7377
@SpringIntegrationTest
74-
@ContextConfiguration(classes = { SimpleElasticsearchRepositoryTests.Config.class })
75-
public class SimpleElasticsearchRepositoryTests {
78+
@ContextConfiguration(classes = { SimpleElasticsearchRepositoryIntegrationTests.Config.class })
79+
public class SimpleElasticsearchRepositoryIntegrationTests {
7680

7781
@Configuration
7882
@Import({ ElasticsearchRestTemplateConfiguration.class })
@@ -714,6 +718,24 @@ void shouldNotReturnNullValuesInFindAllById() throws IOException {
714718
.containsExactlyInAnyOrder("id-one", "id-two", "id-three");
715719
}
716720

721+
@Test // DATAES-934
722+
@DisplayName("should use query and return SearchPage")
723+
void shouldUseQueryAndReturnSearchPage() {
724+
725+
List<SampleEntity> entities = createSampleEntitiesWithMessage("test", 20);
726+
repository.saveAll(entities);
727+
728+
Criteria criteria = new Criteria("message").is("test");
729+
CriteriaQuery query = new CriteriaQuery(new Criteria("message").is("test"));
730+
query.setPageable(PageRequest.of(0, 8));
731+
732+
SearchPage<SampleEntity> searchPage = repository.searchQuery(query);
733+
734+
assertThat(searchPage.getTotalElements()).isEqualTo(20l);
735+
assertThat(searchPage.stream().count()).isEqualTo(8l);
736+
assertThat(searchPage.nextPageable().getOffset()).isEqualTo(8l);
737+
}
738+
717739
private static List<SampleEntity> createSampleEntitiesWithMessage(String message, int numberOfEntities) {
718740

719741
List<SampleEntity> sampleEntities = new ArrayList<>();

0 commit comments

Comments
 (0)