# Multi Search API

原文链接 : [https://www.elastic.co/guide/en/elasticsearch/reference/current/search-multi-search.html](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-multi-search.html)

译文链接 : [http://apache.wiki/display/Elasticsearch/Multi+Search+API](http://apache.wiki/display/Elasticsearch/Multi+Search+API)

贡献者 : @琴剑蓝天

**multi search API **允许在同一API中执行多个搜索请求。它的端点（**endpoint**）是** `_msearch`** 。

它的请求格式与 **multi API** 相似，结构如下（如果特定搜索最终重定向到另一个节点，则结构被特别优化以减少解析）：

```
header\n
body\n
header\n
body\n
```

**header** 分包括要搜索的 **index / indices ，可搜索的可选（mapping）types** ，**search_type**，** `preference`** 和 **`routing`。** 正文包括典型的搜索正文请求（包括**`query`, `aggregations`, `from`, `size`** 等）。 这里是一个例子：

```
$ cat requests
{"index" : "test"}
{"query" : {"match_all" : {}}, "from" : 0, "size" : 10}
{"index" : "test", "search_type" : "dfs_query_then_fetch"}
{"query" : {"match_all" : {}}}
{}
{"query" : {"match_all" : {}}}

{"query" : {"match_all" : {}}}
{"search_type" : "dfs_query_then_fetch"}
{"query" : {"match_all" : {}}}

$ curl -XGET localhost:9200/_msearch --data-binary "@requests"; echo
```

注意，上面包括也被支持的空标题（也可以只是没有任何内容）的示例。

该响应返回一个响应数组，其中包括每个搜索请求的搜索响应和状态代码，与其在原始 **multi search** 请求中的顺序相匹配。 如果该特定搜索请求的完全失败，将返回具有错误消息和相应状态代码的对象，而不是实际的搜索响应。

端点还允许对URI中的 **index/indices**和 **type/types** 进行搜索，在这种情况下，它将被用作默认值，除非在标题中另有明确定义。 例如：

```
$ cat requests
{}
{"query" : {"match_all" : {}}, "from" : 0, "size" : 10}
{}
{"query" : {"match_all" : {}}}
{"index" : "test2"}
{"query" : {"match_all" : {}}}

$ curl -XGET localhost:9200/test/_msearch --data-binary @requests; echo
```

上面将针对没有定义索引的所有请求对 **test** 索引执行搜索，最后一个将针对 **test2** 索引执行。

可以以类似的方式设置 **search_type** 以全局地应用于所有搜索请求。

**msearch** 的 _**max_concurrent_searches**_ 请求参数可用于控制 **multi search api** 将执行的并发搜索的最大数量。 此默认值基于数据节点的数量和默认搜索线程池大小。

### 安全

请查看 [](https://www.elastic.co/guide/en/elasticsearch/reference/current/url-access-control.html "URL-based access control")_[_URL-based access control_](https://www.elastic.co/guide/en/elasticsearch/reference/current/url-access-control.html)_