Multi Get API - shuiyuebingdian/ElasticSearch GitHub Wiki
Multi GET API允许根据索引,类型(可选)和id(以及可能的路由)获取多个文档。响应包括一个docs 数组,其中包含所有获取的文档,每个元素的结构与get API 提供的文档相似。. Here is an example:
GET _mget
{
"docs" : [
{
"_index" : "test",
"_type" : "type",
"_id" : "1"
},
{
"_index" : "test",
"_type" : "type",
"_id" : "2"
}
]
}
mget端点也可以针对索引(在这种情况下不需要body)中使用
GET test/_mget
{
"docs" : [
{
"_type" : "type",
"_id" : "1"
},
{
"_type" : "type",
"_id" : "2"
}
]
}
也可以针对type使用:
GET test/type/_mget
{
"docs" : [
{
"_id" : "1"
},
{
"_id" : "2"
}
]
}
在这种情况下,该ids元素可以直接用于简化请求:
GET test/type/_mget
{
"ids" : ["1", "2"]
}
可选类型
mget API允许为_type可选。将其设置为_all或保留为空,以获取与所有类型的ID相匹配的第一个文档。
如果您没有设置类型,并且有许多文档共享同一类型_id,那么最终只会得到第一个匹配的文档。
例如,如果您在typeA和typeB中有一个文档1,那么以下请求将只给您两次相同的文档:
GET test/_mget
{
"ids" : ["1", "1"]
}
显示指定_type:
GET test/_mget/
{
"docs" : [
{
"_type":"typeA",
"_id" : "1"
},
{
"_type":"typeB",
"_id" : "1"
}
]
}
Source filtering
默认情况下,_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"]
}
}
]
}
Fields
可以指定要在每个文档中检索的特定存储字段,类似于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"]
}
]
}
路由
设置routing参数:
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。
Security See URL-based access control