Skip to content

Latest commit

 

History

History
211 lines (177 loc) · 4.34 KB

Multi_Get_API.md

File metadata and controls

211 lines (177 loc) · 4.34 KB

Multi Get API

Multi GET API允许基于索引、类型(可选)和id(以及可能的路由)获取多个文档。响应包括一个具有所有获取的文档的docs数组,每个元素的结构与get API提供的文档相似。这是一个例子:

GET _mget
{
    "docs" : [
        {
            "_index" : "test",
            "_type" : "type",
            "_id" : "1"
        },
        {
            "_index" : "test",
            "_type" : "type",
            "_id" : "2"
        }
    ]
}

mget端点也可以用于索引(在这种情况下,它不需要在主体中):

GET test/_mget
{
    "docs" : [
        {
            "_type" : "type",
            "_id" : "1"
        },
        {
            "_type" : "type",
            "_id" : "2"
        }
    ]
}

以及类型:

GET test/type/_mget
{
    "docs" : [
        {
            "_id" : "1"
        },
        {
            "_id" : "2"
        }
    ]
}

在这种情况下,ids元素可以直接用于简化请求:

GET test/type/_mget
{
    "ids" : ["1", "2"]
}

可选的类型

mget API允许_type是可选的。将其设置为_all或将其留空,以便获取与所有类型的id匹配的第一个文档。

如果您没有设置类型,并且有很多文档共享相同的_id,您将最终只得到第一个匹配的文档。

例如,如果您在类型A和类型B中有文档1,则以下请求将仅返回相同的文档两次:

GET test/_mget
{
    "ids" : ["1", "1"]
}

在这种情况下需要明确设置_type

GET test/_mget/
{
  "docs" : [
        {
            "_type":"typeA",
            "_id" : "1"
        },
        {
            "_type":"typeB",
            "_id" : "1"
        }
    ]
}

Source过滤

默认情况下,将为每个文档(如果存储)返回_source字段。与get API类似,您只能使用_source参数来检索_source(或不是所有)的部分。您还可以使用url参数_source_source_include_source_exclude来指定默认值,当没有每个文档的指令时,它将被使用。

例如:

GET _mget
{
   "docs" : [
       {
           "_index" : "test",
           "_type" : "type",
           "_id" : "1",
           "_source" : false
       },
       {
           "_index" : "test",
           "_type" : "type",
           "_id" : "2",
           "_source" : ["field3", "field4"]
       },
       {
           "_index" : "test",
           "_type" : "type",
           "_id" : "3",
           "_source" : {
               "include": ["user"],
               "exclude": ["user.location"]
           }
       }
   ]
}

字段

可以根据Get API的stored_fields参数指定特定的存储字段,以便每个文档检索。例如:

GET _mget
{
    "docs" : [
        {
            "_index" : "test",
            "_type" : "type",
            "_id" : "1",
            "stored_fields" : ["field1", "field2"]
        },
        {
            "_index" : "test",
            "_type" : "type",
            "_id" : "2",
            "stored_fields" : ["field3", "field4"]
        }
    ]
}

或者,您可以将查询字符串中的stored_fields参数指定为默认值以应用于所有文档。

GET test/type/_mget?stored_fields=field1,field2
{
    "docs" : [
        {
            "_id" : "1" //①
        },
        {
            "_id" : "2",
            "stored_fields" : ["field3", "field4"] //②
        }
    ]
}

① 返回field1field2


② 返回field3field4

生成的字段

有关仅在创建索引时生成的字段,请参见生成的字段章节

路由

你可以通过参数值指定路由值:

GET _mget?routing=key1
{
    "docs" : [
        {
            "_index" : "test",
            "_type" : "type",
            "_id" : "1",
            "_routing" : "key2"
        },
        {
            "_index" : "test",
            "_type" : "type",
            "_id" : "2"
        }
    ]
}

在这个例子中,文档test/type/2将从对应于路由键key1的分片中获取,但是文档test/type/1将从对应于路由键key2的分片中获取。

安全

参见基于URL的访问控制