使用es批量查询
es的批量查询可以使用mget和msearch两种。其中mget是需要我们知道它的id,可以指定不同的index,也可以指定返回值source。msearch可以通过字段查询来进行一个批量的查找。
_mget
GET /_mget
{
"docs" : [
{
"_index" : "test",
"_type" : "_doc",
"_id" : "1"
},
{
"_index" : "test",
"_type" : "_doc",
"_id" : "2"
}
]
}
这个是官方给出的例子。如果我们知道index,类型,id的情况下我们就可以通过mget来获取批量数据。也可以用source来指定返回数据。
_msearch
GET twitter/_msearch
{}
{"query" : {"match_all" : {}}, "from" : 0, "size" : 10}
{}
{"query" : {"match_all" : {}}}
{"index" : "twitter2"}
{"query" : {"match_all" : {}}}
在_msearch中,请求格式和bulk类似。查询一条数据需要两个对象,第一个设置index和type,第二个设置查询语句。查询语句和search相同。如果只是查询一个index,我们可以在url中带上index,这样,如果查该index可以直接用空对象表示。ps:必须要有两个对象,不然会将下一个查询语句作为index的索引语句。
_msearch的返回值是是一个对象
{
"responses":[{Object},{Object}]
}
每条结果都对应上面的一对查询语句。如果某个查询语句有错,只有那个错误的Object会报错,其他会正常返回。
ps:使用kibana查询的时候不要format查询语句。会无法识别。因为_msearch的格式如下
header\n
body\n
header\n
body\n
format之后有\n,es无法识别