diff --git a/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchRestTemplate.java b/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchRestTemplate.java index af2a00c7a..e0bca8594 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchRestTemplate.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchRestTemplate.java @@ -143,6 +143,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; * @author Peter-Josef Meisch * @author Mathias Teier * @author Gyula Attila Csorogi + * @author Alexander Shabunevich */ public class ElasticsearchRestTemplate extends AbstractElasticsearchTemplate implements ElasticsearchOperations, EsClient, ApplicationContextAware { @@ -1338,7 +1339,13 @@ public class ElasticsearchRestTemplate extends AbstractElasticsearchTemplate } if (query.getPageable().isPaged()) { - startRecord = query.getPageable().getPageNumber() * query.getPageable().getPageSize(); + long offset = query.getPageable().getOffset(); + + if (offset > Integer.MAX_VALUE) { + throw new IllegalArgumentException(String.format("Offset must not be more than %s", Integer.MAX_VALUE)); + } + + startRecord = (int) offset; sourceBuilder.size(query.getPageable().getPageSize()); } sourceBuilder.from(startRecord); diff --git a/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java b/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java index 67422044a..4017935b0 100755 --- a/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java @@ -123,6 +123,7 @@ import org.springframework.util.StringUtils; * @author Martin Choraine * @author Farid Azaza * @author Gyula Attila Csorogi + * @author Alexander Shabunevich */ public class ElasticsearchTemplate extends AbstractElasticsearchTemplate implements ElasticsearchOperations, EsClient, ApplicationContextAware { @@ -1115,7 +1116,13 @@ public class ElasticsearchTemplate extends AbstractElasticsearchTemplate } if (query.getPageable().isPaged()) { - startRecord = query.getPageable().getPageNumber() * query.getPageable().getPageSize(); + long offset = query.getPageable().getOffset(); + + if (offset > Integer.MAX_VALUE) { + throw new IllegalArgumentException(String.format("Offset must not be more than %s", Integer.MAX_VALUE)); + } + + startRecord = (int) offset; searchRequestBuilder.setSize(query.getPageable().getPageSize()); } searchRequestBuilder.setFrom(startRecord);