我需要通过ES中的电子邮件地址查找多个用户(以及报告哪些未找到)来自我有限的(如2天内)ES的知识这听起来像是天生的对于mget操作?
但根据文档显示,mget仅支持ID字段的检索?反正有没有将mget与其他字段结合使用,例如电子邮件?该字段也是嵌套字段(例如nested_object.email)
是否可以告诉mget使用另一个字段?是否有更好的查询类型更适合此要求(包括报告哪些搜索项失败)?
答案 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 merged(the full story is here)和查询也可用于过滤器,反之亦然。还有一个过滤器上下文,当您不需要评分但希望过滤器可以缓存时,您可以使用它。 ES将自动优化执行,以尽可能最有效的顺序运行。
哦,是的,_mget
仅适用于ID。