_mget可以通过非ID字段检索吗?

时间:2016-01-14 18:50:20

标签: elasticsearch

我需要通过ES中的电子邮件地址查找多个用户(以及报告哪些未找到)来自我有限的(如2天内)ES的知识这听起来像是天生的对于mget操作?

但根据文档显示,mget仅支持ID字段的检索?反正有没有将mget与其他字段结合使用,例如电子邮件?该字段也是嵌套字段(例如nested_object.email)

是否可以告诉mget使用另一个字段?是否有更好的查询类型更适合此要求(包括报告哪些搜索项失败)?

1 个答案:

答案 0 :(得分:1)

您需要的是_msearch端点,即the multi search API。它允许您一次发送多个搜索,例如

$ cat requests
{"index" : "users"}
{"query" : {"term" : {"email":"name1@server.com"}}}
{"index" : "users"}
{"query" : {"term" : {"email":"name2@server.com"}}}
{"index" : "users"}
{"query" : {"term" : {"email":"name3@server.com"}}}
{"index" : "users"}
{"query" : {"term" : {"email":"name4@server.com"}}}

$ curl -XGET localhost:9200/_msearch --data-binary "@requests"; echo

要在评论中回答您的其他问题,这取决于您是否使用2.0之前的ES版本。在ES 2.0之前,查询和过滤器的描述方式不同(过滤器更快,更可靠,并且没有参与评分)。从2.0开始,queries and filters have been mergedthe full story is here)和查询也可用于过滤器,反之亦然。还有一个过滤器上下文,当您不需要评分但希望过滤器可以缓存时,您可以使用它。 ES将自动优化执行,以尽可能最有效的顺序运行。

哦,是的,_mget仅适用于ID。