mirror of
https://github.com/spring-projects/spring-data-elasticsearch.git
synced 2025-07-15 14:53:27 +00:00
Basic SortBuilder Support with SearchQuery
This commit is contained in:
parent
c689470cac
commit
b2272dc8d6
@ -17,6 +17,7 @@ import org.elasticsearch.common.unit.TimeValue;
|
|||||||
import org.elasticsearch.index.query.FilterBuilder;
|
import org.elasticsearch.index.query.FilterBuilder;
|
||||||
import org.elasticsearch.index.query.QueryBuilder;
|
import org.elasticsearch.index.query.QueryBuilder;
|
||||||
import org.elasticsearch.search.SearchHit;
|
import org.elasticsearch.search.SearchHit;
|
||||||
|
import org.elasticsearch.search.sort.SortBuilder;
|
||||||
import org.elasticsearch.search.sort.SortOrder;
|
import org.elasticsearch.search.sort.SortOrder;
|
||||||
import org.springframework.data.domain.Page;
|
import org.springframework.data.domain.Page;
|
||||||
import org.springframework.data.domain.PageImpl;
|
import org.springframework.data.domain.PageImpl;
|
||||||
@ -100,13 +101,13 @@ public class ElasticsearchTemplate implements ElasticsearchOperations {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public <T> Page<T> queryForPage(SearchQuery query, Class<T> clazz) {
|
public <T> Page<T> queryForPage(SearchQuery query, Class<T> clazz) {
|
||||||
SearchResponse response = doSearch(prepareSearch(query,clazz), query.getElasticsearchQuery(), query.getElasticsearchFilter());
|
SearchResponse response = doSearch(prepareSearch(query,clazz), query.getElasticsearchQuery(), query.getElasticsearchFilter(),query.getElasticsearchSort());
|
||||||
return mapResults(response, clazz, query.getPageable());
|
return mapResults(response, clazz, query.getPageable());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public <T> Page<T> queryForPage(SearchQuery query, ResultsMapper<T> resultsMapper) {
|
public <T> Page<T> queryForPage(SearchQuery query, ResultsMapper<T> resultsMapper) {
|
||||||
SearchResponse response = doSearch(prepareSearch(query), query.getElasticsearchQuery(), query.getElasticsearchFilter());
|
SearchResponse response = doSearch(prepareSearch(query), query.getElasticsearchQuery(), query.getElasticsearchFilter(),query.getElasticsearchSort());
|
||||||
return resultsMapper.mapResults(response);
|
return resultsMapper.mapResults(response);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -121,10 +122,15 @@ public class ElasticsearchTemplate implements ElasticsearchOperations {
|
|||||||
return extractIds(response);
|
return extractIds(response);
|
||||||
}
|
}
|
||||||
|
|
||||||
private SearchResponse doSearch(SearchRequestBuilder searchRequest, QueryBuilder query, FilterBuilder filter ){
|
private SearchResponse doSearch(SearchRequestBuilder searchRequest, QueryBuilder query, FilterBuilder filter, SortBuilder sortBuilder){
|
||||||
if(filter != null){
|
if(filter != null){
|
||||||
searchRequest.setFilter(filter);
|
searchRequest.setFilter(filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(sortBuilder != null){
|
||||||
|
searchRequest.addSort(sortBuilder);
|
||||||
|
}
|
||||||
|
|
||||||
return searchRequest.setQuery(query).execute().actionGet();
|
return searchRequest.setQuery(query).execute().actionGet();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,11 +3,13 @@ package org.springframework.data.elasticsearch.core.query;
|
|||||||
|
|
||||||
import org.elasticsearch.index.query.FilterBuilder;
|
import org.elasticsearch.index.query.FilterBuilder;
|
||||||
import org.elasticsearch.index.query.QueryBuilder;
|
import org.elasticsearch.index.query.QueryBuilder;
|
||||||
|
import org.elasticsearch.search.sort.SortBuilder;
|
||||||
|
|
||||||
public class SearchQuery extends AbstractQuery{
|
public class SearchQuery extends AbstractQuery{
|
||||||
|
|
||||||
private QueryBuilder elasticsearchQuery;
|
private QueryBuilder elasticsearchQuery;
|
||||||
private FilterBuilder elasticsearchFilter;
|
private FilterBuilder elasticsearchFilter;
|
||||||
|
private SortBuilder elasticsearchSort;
|
||||||
|
|
||||||
public QueryBuilder getElasticsearchQuery() {
|
public QueryBuilder getElasticsearchQuery() {
|
||||||
return elasticsearchQuery;
|
return elasticsearchQuery;
|
||||||
@ -25,4 +27,11 @@ public class SearchQuery extends AbstractQuery{
|
|||||||
this.elasticsearchFilter = elasticsearchFilter;
|
this.elasticsearchFilter = elasticsearchFilter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public SortBuilder getElasticsearchSort() {
|
||||||
|
return elasticsearchSort;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setElasticsearchSort(SortBuilder elasticsearchSort) {
|
||||||
|
this.elasticsearchSort = elasticsearchSort;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,9 @@ package org.springframework.data.elasticsearch.core;
|
|||||||
|
|
||||||
import org.elasticsearch.action.search.SearchResponse;
|
import org.elasticsearch.action.search.SearchResponse;
|
||||||
import org.elasticsearch.search.SearchHit;
|
import org.elasticsearch.search.SearchHit;
|
||||||
|
import org.elasticsearch.search.sort.FieldSortBuilder;
|
||||||
|
import org.elasticsearch.search.sort.SortBuilder;
|
||||||
|
import org.elasticsearch.search.sort.SortOrder;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Ignore;
|
import org.junit.Ignore;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
@ -249,6 +252,65 @@ public class ElasticsearchTemplateTest {
|
|||||||
assertThat(sampleEntities.getTotalElements(), equalTo(1L));
|
assertThat(sampleEntities.getTotalElements(), equalTo(1L));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void shouldTestSortBuilder(){
|
||||||
|
//given
|
||||||
|
List<IndexQuery> indexQueries = new ArrayList<IndexQuery>();
|
||||||
|
//first document
|
||||||
|
String documentId = randomNumeric(5);
|
||||||
|
SampleEntity sampleEntity1 = new SampleEntity();
|
||||||
|
sampleEntity1.setId(documentId);
|
||||||
|
sampleEntity1.setMessage("abc");
|
||||||
|
sampleEntity1.setRate(10);
|
||||||
|
sampleEntity1.setVersion(System.currentTimeMillis());
|
||||||
|
|
||||||
|
IndexQuery indexQuery1 = new IndexQuery();
|
||||||
|
indexQuery1.setId(documentId);
|
||||||
|
indexQuery1.setObject(sampleEntity1);
|
||||||
|
|
||||||
|
//second document
|
||||||
|
String documentId2 = randomNumeric(5);
|
||||||
|
SampleEntity sampleEntity2 = new SampleEntity();
|
||||||
|
sampleEntity2.setId(documentId2);
|
||||||
|
sampleEntity2.setMessage("xyz");
|
||||||
|
sampleEntity2.setRate(5);
|
||||||
|
sampleEntity2.setVersion(System.currentTimeMillis());
|
||||||
|
|
||||||
|
IndexQuery indexQuery2 = new IndexQuery();
|
||||||
|
indexQuery2.setId(documentId2);
|
||||||
|
indexQuery2.setObject(sampleEntity2);
|
||||||
|
|
||||||
|
//third document
|
||||||
|
String documentId3 = randomNumeric(5);
|
||||||
|
SampleEntity sampleEntity3 = new SampleEntity();
|
||||||
|
sampleEntity3.setId(documentId3);
|
||||||
|
sampleEntity3.setMessage("xyz");
|
||||||
|
sampleEntity3.setRate(15);
|
||||||
|
sampleEntity3.setVersion(System.currentTimeMillis());
|
||||||
|
|
||||||
|
IndexQuery indexQuery3 = new IndexQuery();
|
||||||
|
indexQuery3.setId(documentId3);
|
||||||
|
indexQuery3.setObject(sampleEntity3);
|
||||||
|
|
||||||
|
indexQueries.add(indexQuery1);
|
||||||
|
indexQueries.add(indexQuery2);
|
||||||
|
indexQueries.add(indexQuery3);
|
||||||
|
|
||||||
|
elasticsearchTemplate.bulkIndex(indexQueries);
|
||||||
|
elasticsearchTemplate.refresh(SampleEntity.class, true);
|
||||||
|
|
||||||
|
SearchQuery searchQuery = new SearchQuery();
|
||||||
|
searchQuery.setElasticsearchQuery(matchAllQuery());
|
||||||
|
SortBuilder sortBuilder = new FieldSortBuilder("rate").ignoreUnmapped(true).order(SortOrder.ASC);
|
||||||
|
|
||||||
|
searchQuery.setElasticsearchSort(sortBuilder);
|
||||||
|
//when
|
||||||
|
Page<SampleEntity> sampleEntities = elasticsearchTemplate.queryForPage(searchQuery,SampleEntity.class);
|
||||||
|
//then
|
||||||
|
assertThat(sampleEntities.getTotalElements(), equalTo(3L));
|
||||||
|
assertThat(sampleEntities.getContent().get(0).getRate(),is(sampleEntity2.getRate()));
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void shouldExecuteStringQuery(){
|
public void shouldExecuteStringQuery(){
|
||||||
//given
|
//given
|
||||||
@ -414,5 +476,4 @@ public class ElasticsearchTemplateTest {
|
|||||||
assertThat(page.getTotalElements(), is(equalTo(1L)));
|
assertThat(page.getTotalElements(), is(equalTo(1L)));
|
||||||
assertThat(page.getContent().get(0), is(message));
|
assertThat(page.getContent().get(0), is(message));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user