多个 GET API
多 GET API 允许基于索引,类型(可选)和ID(也可能路由)获取多个文档。响应包括获取的 docs 列表,每个文件的结构都类似于 GET API 提供文件的结构。下面是一个例子:
curl 'localhost:9200/_mget' -d '{"docs" : [{"_index" : "test","_type" : "type","_id" : "1"},{"_index" : "test","_type" : "type","_id" : "2"}]}'
mget也可以针对一个索引(在 body 体中不需要):
curl 'localhost:9200/test/_mget' -d '{"docs" : [{"_type" : "type","_id" : "1"},{"_type" : "type","_id" : "2"}]}'
类型如下:
curl 'localhost:9200/test/type/_mget' -d '{"docs" : [{"_id" : "1"},{"_id" : "2"}]}'
在这种情况下,id 可以被用作发起简单的请求:
curl 'localhost:9200/test/type/_mget' -d '{"ids" : ["1", "2"]}'
可选类型
该 MGET API 允许_type是可选的。将其设置为 _all 或空,以获取第一个文档匹配所有类型的ID。
如果不设置类型,许多文件共享相同的 _id,你最终将只得到第一个匹配的文件。
例如,如果你有文件1包含 typeA 和 typeB ,那么下面的请求会给你同一个文档两次:
curl 'localhost:9200/test/_mget' -d '{"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 来指定默认值。例如:
curl 'localhost:9200/_mget' -d '{"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 参数。例如:
curl 'localhost:9200/_mget' -d '{"docs" : [{"_index" : "test","_type" : "type","_id" : "1","stored_fields" : ["field1", "field2"]},{"_index" : "test","_type" : "type","_id" : "2","stored_fields" : ["field3", "field4"]}]}'
或者,可以指定 stored_fields作为默认值被应用到所有文件中来查询字符串参数。
curl 'localhost:9200/test/type/_mget?stored_fields=field1,field2' -d '{"docs" : [{"_id" : "1" (1)},{"_id" : "2","stored_fields" : ["field3", "field4"] (2)}]}'
(1)返回 field1和 field2
(2)返回 field3和 field4
Generated fields
见 “Generated fields”
Routing
您也可以指定 routing 作为参数:
curl 'localhost:9200/_mget?routing=key1' -d '{"docs" : [{"_index" : "test","_type" : "type","_id" : "1","_routing" : "key2"},{"_index" : "test","_type" : "type","_id" : "2"}]}'
在这个例子中,文件 test/type/2将从对应于 routing = key1 的分片中获取。但文件 test/type/1将被从对应于 routing = key1 的分片中获取。
安全
见 URL-based access control
