diff --git a/docs/reference/docs/multi-get.asciidoc b/docs/reference/docs/multi-get.asciidoc index 4bd1af6c2fc..01f972e41b2 100644 --- a/docs/reference/docs/multi-get.asciidoc +++ b/docs/reference/docs/multi-get.asciidoc @@ -96,3 +96,31 @@ curl 'localhost:9200/_mget' -d '{ ] }' -------------------------------------------------- + +[float] +[[mget-routing]] +=== Routing + +You can specify also specify routing value as a parameter: + +[source,js] +-------------------------------------------------- +curl 'localhost:9200/_mget?routing=key1' -d '{ + "docs" : [ + { + "_index" : "test", + "_type" : "type", + "_id" : "1", + "_routing" : "key2" + }, + { + "_index" : "test", + "_type" : "type", + "_id" : "2" + } + ] +}' +-------------------------------------------------- + +In this example, document `test/type/2` will be fetch from shard corresponding to routing key `key1` but +document `test/type/1` will be fetch from shard corresponding to routing key `key2`. diff --git a/src/main/java/org/elasticsearch/action/get/MultiGetRequest.java b/src/main/java/org/elasticsearch/action/get/MultiGetRequest.java index 629273e948e..f9defee0089 100644 --- a/src/main/java/org/elasticsearch/action/get/MultiGetRequest.java +++ b/src/main/java/org/elasticsearch/action/get/MultiGetRequest.java @@ -273,6 +273,10 @@ public class MultiGetRequest extends ActionRequest { } public MultiGetRequest add(@Nullable String defaultIndex, @Nullable String defaultType, @Nullable String[] defaultFields, @Nullable FetchSourceContext defaultFetchSource, BytesReference data, boolean allowExplicitIndex) throws Exception { + return add(defaultIndex, defaultType, defaultFields, defaultFetchSource, null, data, allowExplicitIndex); + } + + public MultiGetRequest add(@Nullable String defaultIndex, @Nullable String defaultType, @Nullable String[] defaultFields, @Nullable FetchSourceContext defaultFetchSource, @Nullable String defaultRouting, BytesReference data, boolean allowExplicitIndex) throws Exception { XContentParser parser = XContentFactory.xContent(data).createParser(data); try { XContentParser.Token token; @@ -289,7 +293,7 @@ public class MultiGetRequest extends ActionRequest { String index = defaultIndex; String type = defaultType; String id = null; - String routing = null; + String routing = defaultRouting; String parent = null; List fields = null; long version = Versions.MATCH_ANY; @@ -389,7 +393,7 @@ public class MultiGetRequest extends ActionRequest { if (!token.isValue()) { throw new ElasticSearchIllegalArgumentException("ids array element should only contain ids"); } - add(new Item(defaultIndex, defaultType, parser.text()).fields(defaultFields).fetchSourceContext(defaultFetchSource)); + add(new Item(defaultIndex, defaultType, parser.text()).fields(defaultFields).fetchSourceContext(defaultFetchSource).routing(defaultRouting)); } } } diff --git a/src/main/java/org/elasticsearch/rest/action/get/RestMultiGetAction.java b/src/main/java/org/elasticsearch/rest/action/get/RestMultiGetAction.java index 96353586404..2bb73b5f060 100644 --- a/src/main/java/org/elasticsearch/rest/action/get/RestMultiGetAction.java +++ b/src/main/java/org/elasticsearch/rest/action/get/RestMultiGetAction.java @@ -72,7 +72,7 @@ public class RestMultiGetAction extends BaseRestHandler { FetchSourceContext defaultFetchSource = FetchSourceContext.parseFromRestRequest(request); try { - multiGetRequest.add(request.param("index"), request.param("type"), sFields, defaultFetchSource, request.content(), allowExplicitIndex); + multiGetRequest.add(request.param("index"), request.param("type"), sFields, defaultFetchSource, request.param("routing"), request.content(), allowExplicitIndex); } catch (Exception e) { try { XContentBuilder builder = restContentBuilder(request);