Multi Get API
Multi Get API允许基于索引、类型(可选)和id(可能还有路由)获得多个文档,响应包括一个docs
数组,其中包含所有获取的文档,以便与原始的multi-get请求相对应(如果特定get失败,则在响应中包括包含此错误的对象),成功get的结构在结构上类似于get API提供的文档。
这里有一个例子:
GET /_mget
{
"docs" : [
{
"_index" : "test",
"_type" : "_doc",
"_id" : "1"
},
{
"_index" : "test",
"_type" : "_doc",
"_id" : "2"
}
]
}
mget
端点还可以用于索引(在这种情况下,body中不需要索引):
GET /test/_mget
{
"docs" : [
{
"_type" : "_doc",
"_id" : "1"
},
{
"_type" : "_doc",
"_id" : "2"
}
]
}
和类型:
GET /test/_doc/_mget
{
"docs" : [
{
"_id" : "1"
},
{
"_id" : "2"
}
]
}
在这种情况下,可以直接使用ids
元素来简化请求:
GET /test/_doc/_mget
{
"ids" : ["1", "2"]
}
源过滤
默认情况下,每个文档将返回_source
字段(如果存储了的话),与get API类似,通过使用_source
参数,你可以只检索_source
的一部分(或者完全没有),你还可以使用url参数_source
、_source_include
和_source_exclude
来指定默认值,当没有针对每个文档指令时将使用默认值。
例如:
GET /_mget
{
"docs" : [
{
"_index" : "test",
"_type" : "_doc",
"_id" : "1",
"_source" : false
},
{
"_index" : "test",
"_type" : "_doc",
"_id" : "2",
"_source" : ["field3", "field4"]
},
{
"_index" : "test",
"_type" : "_doc",
"_id" : "3",
"_source" : {
"include": ["user"],
"exclude": ["user.location"]
}
}
]
}
字段
可以指定特定的存储字段,以便对每个要获取的文档进行检索,类似于get API的stored_fields
参数,例如:
GET /_mget
{
"docs" : [
{
"_index" : "test",
"_type" : "_doc",
"_id" : "1",
"stored_fields" : ["field1", "field2"]
},
{
"_index" : "test",
"_type" : "_doc",
"_id" : "2",
"stored_fields" : ["field3", "field4"]
}
]
}
或者,你可以将查询字符串中的stored_fields
参数指定为应用于所有文档的默认参数。
GET /test/_doc/_mget?stored_fields=field1,field2
{
"docs" : [
{
"_id" : "1"
},
{
"_id" : "2",
"stored_fields" : ["field3", "field4"]
}
]
}
-
"_id" : "1"
=> 返回field1
、field2
。 -
"stored_fields" : ["field3", "field4"]
=> 返回field3
、field4
。
路由
还可以将路由值指定为参数:
GET /_mget?routing=key1
{
"docs" : [
{
"_index" : "test",
"_type" : "_doc",
"_id" : "1",
"routing" : "key2"
},
{
"_index" : "test",
"_type" : "_doc",
"_id" : "2"
}
]
}
在本例中,文档test/_doc/2
将从与路由键key1
对应的碎片中获取,但是,文档test/_doc/1
将从与路由键key2
对应的碎片中获取。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。