天天看点

ElasticSearch 学习笔记:Multi Search

本文目录

1 简介

2 格式

3 header格式

4 body格式

5 返回格式

6 性能

7 相关文章

1 简介

批量查询接口(Multi Search API)允许在一次请求中执行多个查询操作,并将查询结果一起返回。

2 格式

GET /_msearch

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

注意事项:

(1)必须严格按照格式:header和body成对出现,且结尾处显式追加\n(回车)。

(2)每个header和body都仅占一行,否则会报错,因为ES是通过\n(回车)来识别语句的。

(3)header不可省略,即使内容为空,也要显式写上{}并追加\n(回车)表示本行结束。

(4)在最后一个body结尾处,容易忘记追加一个\n,从而导致最后一个查询未执行。

3 header格式

header用于指定index、type、search_type、preference、routing等内容,告诉ElasticSearch下一个body的查询位置。

{"index":"<indexName>","type":"<typeName>"}
           

若所有header的index相同,或index及type都相同,可通过URL指定全局index或type。

这样,在header中就可以不再设置index或type内容。

但请注意,header部分不可省略,需要用{}\n占位。

否则,ElasticSearch将会把下一个body当成header处理,从而导致整个批量查询都解析错位。

GET/<indexName>[/<typeName>]/_msearch

{}\n
body\n
{}\n
body\n
…
           

4 body格式

body用于指定具体的查询内容,其格式请参考_search查询格式。

5 返回格式

返回的数据是一个数组,数组中的每一个元素依次对应一个查询(body)。

{

    "responses":[<body1Response>,<body2Response>, ...]

}
           

某个查询失败将在对应的返回信息中显示错误信息,不会影响其它查询结果。

6 性能

批量查询只是一次性将多个单查询打包在一起,统一发到ElasticSearch服务器,并将查询结果打包统一返回,从而节省了多次请求的网络开销。

但在服务器方面,批量查询相当于收到多个单查询请求,执行性能不会有太大差异。

通过max_concurrent_searches请求参数,可以设置批量请求可使用的最大并发查询线程数,默认基于节点数和查询线程池大小。

7 相关文章

《ElasticSearch 学习笔记:常用内容》

《ElasticSearch 学习笔记:Mapping》

《ElasticSearch 学习笔记:Reindex》

《ElasticSearch 学习笔记:聚合(Aggregation) - Top Hits》

继续阅读