DATAES-187 - Use Pageable#getOffset to set from offset in SearchRequest.

Original PR: #353
This commit is contained in:
Sascha Woo
2019-12-06 13:15:15 +01:00
committed by Peter-Josef Meisch
parent 9d4fe6d4af
commit ff381c63b6
3 changed files with 67 additions and 10 deletions

View File

@@ -43,6 +43,7 @@ import java.util.stream.Collectors;
import org.assertj.core.util.Lists;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.support.IndicesOptions;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.cluster.metadata.AliasMetaData;
@@ -61,6 +62,7 @@ import org.springframework.data.annotation.Id;
import org.springframework.data.annotation.Version;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Order;
import org.springframework.data.elasticsearch.ElasticsearchException;
@@ -1443,8 +1445,7 @@ public abstract class ElasticsearchTemplateTests {
.withUpdateRequest(updateRequest).build();
// when
UpdateRequest request = ((AbstractElasticsearchTemplate) elasticsearchTemplate).getRequestFactory()
.updateRequest(updateQuery, IndexCoordinates.of("index"));
UpdateRequest request = getRequestFactory().updateRequest(updateQuery, IndexCoordinates.of("index"));
// then
assertThat(request).isNotNull();
@@ -1465,8 +1466,7 @@ public abstract class ElasticsearchTemplateTests {
.withUpdateRequest(updateRequest).build();
// when
UpdateRequest request = ((AbstractElasticsearchTemplate) elasticsearchTemplate).getRequestFactory()
.updateRequest(updateQuery, IndexCoordinates.of("index"));
UpdateRequest request = getRequestFactory().updateRequest(updateQuery, IndexCoordinates.of("index"));
// then
assertThat(request).isNotNull();
@@ -2794,6 +2794,32 @@ public abstract class ElasticsearchTemplateTests {
}
}
@Test // DATAES-187
public void shouldUsePageableOffsetToSetFromInSearchRequest() {
// given
Pageable pageable = new PageRequest(1, 10, Sort.unsorted()) {
@Override
public long getOffset() {
return 30;
}
};
NativeSearchQuery query = new NativeSearchQueryBuilder() //
.withPageable(pageable) //
.build();
// when
SearchRequest searchRequest = getRequestFactory().searchRequest(query, null, IndexCoordinates.of("test"));
// then
assertThat(searchRequest.source().from()).isEqualTo(30);
}
protected RequestFactory getRequestFactory() {
return ((AbstractElasticsearchTemplate) elasticsearchTemplate).getRequestFactory();
}
@Data
@NoArgsConstructor
@AllArgsConstructor

View File

@@ -22,12 +22,20 @@ import static org.springframework.data.elasticsearch.annotations.FieldType.*;
import lombok.Data;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.client.Client;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.index.engine.DocumentMissingException;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.annotation.Id;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.core.query.NativeSearchQuery;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.data.elasticsearch.core.query.UpdateQuery;
import org.springframework.data.elasticsearch.core.query.UpdateQueryBuilder;
import org.springframework.data.elasticsearch.junit.jupiter.ElasticsearchTemplateConfiguration;
@@ -36,11 +44,14 @@ import org.springframework.test.context.ContextConfiguration;
/**
* @author Peter-Josef Meisch
* @author Sascha Woo
*/
@SpringIntegrationTest
@ContextConfiguration(classes = { ElasticsearchTemplateConfiguration.class })
public class ElasticsearchTransportTemplateTests extends ElasticsearchTemplateTests {
@Autowired private Client client;
@Test
public void shouldThrowExceptionIfDocumentDoesNotExistWhileDoingPartialUpdate() {
// when
@@ -52,6 +63,29 @@ public class ElasticsearchTransportTemplateTests extends ElasticsearchTemplateTe
}).isInstanceOf(DocumentMissingException.class);
}
@Test // DATAES-187
public void shouldUsePageableOffsetToSetFromInSearchRequest() {
// given
Pageable pageable = new PageRequest(1, 10, Sort.unsorted()) {
@Override
public long getOffset() {
return 30;
}
};
NativeSearchQuery query = new NativeSearchQueryBuilder() //
.withPageable(pageable) //
.build();
// when
SearchRequestBuilder searchRequestBuilder = getRequestFactory().searchRequestBuilder(client, query, null,
IndexCoordinates.of("test"));
// then
assertThat(searchRequestBuilder.request().source().from()).isEqualTo(30);
}
@Data
@Document(indexName = "test-index-sample-core-transport-template", type = "test-type", shards = 1, replicas = 0,
refreshInterval = "-1")