ElasticSearch批量查询

4,626 阅读1分钟

使用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来指定返回数据。

_mget API

_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无法识别