本文目录
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》