Multi Search API

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

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

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

header 分包括要搜索的 index / indices ,可搜索的可选(mapping)typessearch_type preferencerouting 正文包括典型的搜索正文请求(包括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/indicestype/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 以全局地应用于所有搜索请求。

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

安全

请查看 URL-based access control