mirror of
https://github.com/honeymoose/OpenSearch.git
synced 2025-02-22 12:56:53 +00:00
SearchTemplateRequest to implement CompositeIndicesRequest (#21865)
SearchTemplateRequest to implement CompositeIndicesRequest Given that SearchTemplateRequest effectively delegates to search when a search is being executed, it should implement the CompositeIndicesRequest interface. The subrequests method should return a single search request. When a search is not going to be executed, because we are in simulate mode, there are no inner requests, and there are no corresponding indices to that request either. Closes #21747
This commit is contained in:
parent
be4074e13d
commit
6eaff9432d
@ -25,7 +25,7 @@ import java.util.List;
|
||||
* Needs to be implemented by all {@link org.elasticsearch.action.ActionRequest} subclasses that are composed of multiple subrequests
|
||||
* which relate to one or more indices. Allows to retrieve those subrequests and reason about them separately. A composite request is
|
||||
* executed by its own transport action class (e.g. {@link org.elasticsearch.action.search.TransportMultiSearchAction}), which goes
|
||||
* through all the subrequests and delegates their exection to the appropriate transport action (e.g.
|
||||
* through all the subrequests and delegates their execution to the appropriate transport action (e.g.
|
||||
* {@link org.elasticsearch.action.search.TransportSearchAction}) for each single item.
|
||||
*/
|
||||
public interface CompositeIndicesRequest {
|
||||
|
@ -63,7 +63,11 @@ public class MultiSearchTemplateRequest extends ActionRequest implements Composi
|
||||
|
||||
@Override
|
||||
public List<? extends IndicesRequest> subRequests() {
|
||||
return requests;
|
||||
List<IndicesRequest> indicesRequests = new ArrayList<>();
|
||||
for (SearchTemplateRequest request : requests) {
|
||||
indicesRequests.addAll(request.subRequests());
|
||||
}
|
||||
return indicesRequests;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -21,15 +21,16 @@ package org.elasticsearch.script.mustache;
|
||||
|
||||
import org.elasticsearch.action.ActionRequest;
|
||||
import org.elasticsearch.action.ActionRequestValidationException;
|
||||
import org.elasticsearch.action.CompositeIndicesRequest;
|
||||
import org.elasticsearch.action.IndicesRequest;
|
||||
import org.elasticsearch.action.search.SearchRequest;
|
||||
import org.elasticsearch.action.support.IndicesOptions;
|
||||
import org.elasticsearch.common.Strings;
|
||||
import org.elasticsearch.common.io.stream.StreamInput;
|
||||
import org.elasticsearch.common.io.stream.StreamOutput;
|
||||
import org.elasticsearch.script.ScriptType;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import static org.elasticsearch.action.ValidateActions.addValidationError;
|
||||
@ -37,7 +38,7 @@ import static org.elasticsearch.action.ValidateActions.addValidationError;
|
||||
/**
|
||||
* A request to execute a search based on a search template.
|
||||
*/
|
||||
public class SearchTemplateRequest extends ActionRequest implements IndicesRequest {
|
||||
public class SearchTemplateRequest extends ActionRequest implements CompositeIndicesRequest {
|
||||
|
||||
private SearchRequest request;
|
||||
private boolean simulate = false;
|
||||
@ -167,12 +168,13 @@ public class SearchTemplateRequest extends ActionRequest implements IndicesReque
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] indices() {
|
||||
return request != null ? request.indices() : Strings.EMPTY_ARRAY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IndicesOptions indicesOptions() {
|
||||
return request != null ? request.indicesOptions() : SearchRequest.DEFAULT_INDICES_OPTIONS;
|
||||
public List<? extends IndicesRequest> subRequests() {
|
||||
//if we are simulating no index is involved in the request
|
||||
if (simulate) {
|
||||
assert request == null;
|
||||
return Collections.emptyList();
|
||||
}
|
||||
//composite request as it delegates to search, but it holds one single action (search itself)
|
||||
return Collections.singletonList(request);
|
||||
}
|
||||
}
|
||||
|
@ -41,16 +41,16 @@ public class MultiSearchTemplateRequestTests extends ESTestCase {
|
||||
assertThat(request.requests().size(), equalTo(3));
|
||||
assertThat(request.requests().get(0).getRequest().indices()[0], equalTo("test0"));
|
||||
assertThat(request.requests().get(0).getRequest().indices()[1], equalTo("test1"));
|
||||
assertThat(request.requests().get(0).indices(), arrayContaining("test0", "test1"));
|
||||
assertThat(request.requests().get(0).getRequest().indices(), arrayContaining("test0", "test1"));
|
||||
assertThat(request.requests().get(0).getRequest().requestCache(), equalTo(true));
|
||||
assertThat(request.requests().get(0).getRequest().preference(), nullValue());
|
||||
assertThat(request.requests().get(1).indices()[0], equalTo("test2"));
|
||||
assertThat(request.requests().get(1).indices()[1], equalTo("test3"));
|
||||
assertThat(request.requests().get(1).getRequest().indices()[0], equalTo("test2"));
|
||||
assertThat(request.requests().get(1).getRequest().indices()[1], equalTo("test3"));
|
||||
assertThat(request.requests().get(1).getRequest().types()[0], equalTo("type1"));
|
||||
assertThat(request.requests().get(1).getRequest().requestCache(), nullValue());
|
||||
assertThat(request.requests().get(1).getRequest().preference(), equalTo("_local"));
|
||||
assertThat(request.requests().get(2).indices()[0], equalTo("test4"));
|
||||
assertThat(request.requests().get(2).indices()[1], equalTo("test1"));
|
||||
assertThat(request.requests().get(2).getRequest().indices()[0], equalTo("test4"));
|
||||
assertThat(request.requests().get(2).getRequest().indices()[1], equalTo("test1"));
|
||||
assertThat(request.requests().get(2).getRequest().types()[0], equalTo("type2"));
|
||||
assertThat(request.requests().get(2).getRequest().types()[1], equalTo("type1"));
|
||||
assertThat(request.requests().get(2).getRequest().routing(), equalTo("123"));
|
||||
|
Loading…
x
Reference in New Issue
Block a user