Multi Get API - shuiyuebingdian/ElasticSearch GitHub Wiki

Multi Get API

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