From f14e841f4bcff6cf57bd162e55d0a387d4ea698b Mon Sep 17 00:00:00 2001 From: Patrick Strawderman Date: Sun, 29 Nov 2020 13:39:18 -0800 Subject: [PATCH] DATAES-988 Allow specifying max results in NativeSearchQueryBuilder Add a withMaxResults method to NativeSearchQueryBuilder for specifying the maxResults on the built Query. This is common for aggregation queries where search hits are not needed. Having the builder method for setting maxResults is a minor ergonomic improvement, e.g. NativeSearchQuery searchQuery = NativeSearchQueryBuilder() .withQuery(matchAllQuery()) .addAggregation(terms("examples").field("example")) .withMaxResults(0) .build(); versus what was required before: NativeSearchQuery searchQuery = NativeSearchQueryBuilder() .withQuery(matchAllQuery()) .addAggregation(terms("examples").field("example")) .build(); searchQuery.setMaxResults(0); --- .../core/query/NativeSearchQueryBuilder.java | 11 +++++++++++ .../ElasticsearchTemplateAggregationTests.java | 2 ++ 2 files changed, 13 insertions(+) diff --git a/src/main/java/org/springframework/data/elasticsearch/core/query/NativeSearchQueryBuilder.java b/src/main/java/org/springframework/data/elasticsearch/core/query/NativeSearchQueryBuilder.java index fa5d9fdf7..c83abd00e 100755 --- a/src/main/java/org/springframework/data/elasticsearch/core/query/NativeSearchQueryBuilder.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/query/NativeSearchQueryBuilder.java @@ -66,6 +66,7 @@ public class NativeSearchQueryBuilder { @Nullable private SearchType searchType; @Nullable private IndicesOptions indicesOptions; @Nullable private String preference; + @Nullable private Integer maxResults; public NativeSearchQueryBuilder withQuery(QueryBuilder queryBuilder) { this.queryBuilder = queryBuilder; @@ -167,6 +168,11 @@ public NativeSearchQueryBuilder withPreference(String preference) { return this; } + public NativeSearchQueryBuilder withMaxResults(Integer maxResults) { + this.maxResults = maxResults; + return this; + } + public NativeSearchQuery build() { NativeSearchQuery nativeSearchQuery = new NativeSearchQuery(queryBuilder, filterBuilder, sortBuilders, @@ -218,10 +224,15 @@ public NativeSearchQuery build() { if (indicesOptions != null) { nativeSearchQuery.setIndicesOptions(indicesOptions); } + if (preference != null) { nativeSearchQuery.setPreference(preference); } + if (maxResults != null) { + nativeSearchQuery.setMaxResults(maxResults); + } + return nativeSearchQuery; } } diff --git a/src/test/java/org/springframework/data/elasticsearch/core/aggregation/ElasticsearchTemplateAggregationTests.java b/src/test/java/org/springframework/data/elasticsearch/core/aggregation/ElasticsearchTemplateAggregationTests.java index a13174cb7..311f476ef 100644 --- a/src/test/java/org/springframework/data/elasticsearch/core/aggregation/ElasticsearchTemplateAggregationTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/core/aggregation/ElasticsearchTemplateAggregationTests.java @@ -118,6 +118,7 @@ public void shouldReturnAggregatedResponseForGivenSearchQuery() { .withQuery(matchAllQuery()) // .withSearchType(SearchType.DEFAULT) // .addAggregation(terms("subjects").field("subject")) // + .withMaxResults(0) // .build(); // when SearchHits searchHits = operations.search(searchQuery, ArticleEntity.class, @@ -127,6 +128,7 @@ public void shouldReturnAggregatedResponseForGivenSearchQuery() { // then assertThat(aggregations).isNotNull(); assertThat(aggregations.asMap().get("subjects")).isNotNull(); + assertThat(searchHits.hasSearchHits()).isFalse(); } /**