Skip to content

Commit ca9b2b9

Browse files
authored
Repsect indices options on _msearch (#35887)
Today we don't respect the indices options when they are passed as request parameters to the `_msearch` endpoint. This is unintuitive and doesn't cause any errors. This changes uses the top-level indices options as the defaults for each sub search-request. Closes #35851
1 parent b078e29 commit ca9b2b9

File tree

3 files changed

+22
-1
lines changed

3 files changed

+22
-1
lines changed

server/src/main/java/org/elasticsearch/action/search/MultiSearchRequest.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ public static void readMultiLineFormat(BytesReference data,
205205
if (searchType != null) {
206206
searchRequest.searchType(searchType);
207207
}
208-
IndicesOptions defaultOptions = SearchRequest.DEFAULT_INDICES_OPTIONS;
208+
IndicesOptions defaultOptions = searchRequest.indicesOptions();
209209
// now parse the action
210210
if (nextMarker - from > 0) {
211211
try (InputStream stream = data.slice(from, nextMarker - from).streamInput();
@@ -230,7 +230,10 @@ public static void readMultiLineFormat(BytesReference data,
230230
searchRequest.routing(nodeStringValue(value, null));
231231
} else if ("allow_partial_search_results".equals(entry.getKey())) {
232232
searchRequest.allowPartialSearchResults(nodeBooleanValue(value, null));
233+
} else {
234+
// TODO we should not be lenient here and fail if there is any unknown key in the source map
233235
}
236+
234237
}
235238
defaultOptions = IndicesOptions.fromMap(source, defaultOptions);
236239
}

server/src/main/java/org/elasticsearch/rest/action/search/RestMultiSearchAction.java

+2
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,8 @@ public RestChannelConsumer prepareRequest(final RestRequest request, final NodeC
8686
*/
8787
public static MultiSearchRequest parseRequest(RestRequest restRequest, boolean allowExplicitIndex) throws IOException {
8888
MultiSearchRequest multiRequest = new MultiSearchRequest();
89+
IndicesOptions indicesOptions = IndicesOptions.fromRequest(restRequest, multiRequest.indicesOptions());
90+
multiRequest.indicesOptions(indicesOptions);
8991
if (restRequest.hasParam("max_concurrent_searches")) {
9092
multiRequest.maxConcurrentSearchRequests(restRequest.paramAsInt("max_concurrent_searches", 0));
9193
}

server/src/test/java/org/elasticsearch/action/search/MultiSearchRequestTests.java

+16
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
import java.io.IOException;
4242
import java.nio.charset.StandardCharsets;
4343
import java.util.ArrayList;
44+
import java.util.Collections;
4445
import java.util.List;
4546

4647
import static java.util.Collections.singletonList;
@@ -102,6 +103,21 @@ public void testSimpleAddWithCarriageReturn() throws Exception {
102103
assertThat(request.requests().get(0).types().length, equalTo(0));
103104
}
104105

106+
public void testDefaultIndicesOptions() throws IOException {
107+
final String requestContent = "{\"index\":\"test\", \"expand_wildcards\" : \"open,closed\"}}\r\n" +
108+
"{\"query\" : {\"match_all\" :{}}}\r\n";
109+
FakeRestRequest restRequest = new FakeRestRequest.Builder(xContentRegistry())
110+
.withContent(new BytesArray(requestContent), XContentType.JSON)
111+
.withParams(Collections.singletonMap("ignore_unavailable", "true"))
112+
.build();
113+
MultiSearchRequest request = RestMultiSearchAction.parseRequest(restRequest, true);
114+
assertThat(request.requests().size(), equalTo(1));
115+
assertThat(request.requests().get(0).indices()[0], equalTo("test"));
116+
assertThat(request.requests().get(0).indicesOptions(),
117+
equalTo(IndicesOptions.fromOptions(true, true, true, true, SearchRequest.DEFAULT_INDICES_OPTIONS)));
118+
assertThat(request.requests().get(0).types().length, equalTo(0));
119+
}
120+
105121
public void testSimpleAdd2() throws Exception {
106122
MultiSearchRequest request = parseMultiSearchRequest("/org/elasticsearch/action/search/simple-msearch2.json");
107123
assertThat(request.requests().size(), equalTo(5));

0 commit comments

Comments
 (0)