Browse Source

[HLRC] Send terminate_after as query string parameter to the count API (#46474)

Prior to this commit terminate_after was sent as request body parameter
(via SearchSourceBuilder), which is not possible in the count api.

Closes #46446
Turaç Kangal 6 years ago
parent
commit
084d8d8165

+ 7 - 0
client/rest-high-level/src/main/java/org/elasticsearch/client/RequestConverters.java

@@ -498,6 +498,9 @@ final class RequestConverters {
         params.withRouting(countRequest.routing());
         params.withPreference(countRequest.preference());
         params.withIndicesOptions(countRequest.indicesOptions());
+        if (countRequest.terminateAfter() != 0){
+            params.withTerminateAfter(countRequest.terminateAfter());
+        }
         request.addParameters(params.asMap());
         request.setEntity(createEntity(countRequest.source(), REQUEST_BODY_CONTENT_TYPE));
         return request;
@@ -910,6 +913,10 @@ final class RequestConverters {
             return this;
         }
 
+        Params withTerminateAfter(int terminateAfter){
+            return putParam("terminate_after", String.valueOf(terminateAfter));
+        }
+
         Params withTimeout(TimeValue timeout) {
             return putParam("timeout", timeout);
         }

+ 7 - 2
client/rest-high-level/src/main/java/org/elasticsearch/client/core/CountRequest.java

@@ -25,6 +25,7 @@ import org.elasticsearch.action.IndicesRequest;
 import org.elasticsearch.action.support.IndicesOptions;
 import org.elasticsearch.common.Strings;
 import org.elasticsearch.search.builder.SearchSourceBuilder;
+import org.elasticsearch.search.internal.SearchContext;
 
 import java.util.Arrays;
 import java.util.Objects;
@@ -42,6 +43,7 @@ public final class CountRequest extends ActionRequest implements IndicesRequest.
     private String preference;
     private SearchSourceBuilder searchSourceBuilder;
     private IndicesOptions indicesOptions = DEFAULT_INDICES_OPTIONS;
+    private int terminateAfter = SearchContext.DEFAULT_TERMINATE_AFTER;
 
     public CountRequest() {
         this.searchSourceBuilder = new SearchSourceBuilder();
@@ -165,11 +167,14 @@ public final class CountRequest extends ActionRequest implements IndicesRequest.
     }
 
     public int terminateAfter() {
-        return this.searchSourceBuilder.terminateAfter();
+        return this.terminateAfter;
     }
 
     public CountRequest terminateAfter(int terminateAfter) {
-        this.searchSourceBuilder.terminateAfter(terminateAfter);
+        if (terminateAfter < 0) {
+            throw new IllegalArgumentException("terminateAfter must be > 0");
+        }
+        this.terminateAfter = terminateAfter;
         return this;
     }
 

+ 4 - 0
client/rest-high-level/src/test/java/org/elasticsearch/client/RequestConvertersTests.java

@@ -1191,6 +1191,10 @@ public class RequestConvertersTests extends ESTestCase {
             countRequest.preference(randomAlphaOfLengthBetween(3, 10));
             expectedParams.put("preference", countRequest.preference());
         }
+        if (randomBoolean()){
+            countRequest.terminateAfter(randomIntBetween(0, Integer.MAX_VALUE));
+            expectedParams.put("terminate_after", String.valueOf(countRequest.terminateAfter()));
+        }
     }
 
     public void testMultiSearch() throws IOException {