我有一个要求,通过电子邮件地址在ES中查找多个用户(以及没有找到的报告)从我有限的(如2天)的ES知识,这听起来像是一个自然适合的mget操作?
但是,根据文档,mget似乎只支持通过ID字段进行检索?是否可以将mget与另一个字段(如电子邮件)结合使用?字段也是嵌套字段(如nested_object.email)。
有可能告诉mget使用另一个字段吗?是否有更好的查询类型更适合此要求(包括报告哪些搜索项失败)?
发布于 2016-01-15 05:07:24
您需要的是_msearch端点,也就是多搜索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开始,查询和筛选器已经合并。 (完整的故事就在这里)和查询也可以用于过滤器,反之亦然。仍然有一个过滤器上下文,当您不需要评分,但希望您的过滤器是可缓存的时候,您可以使用它。执行将由ES自动优化,以尽可能高效的顺序运行。
哦,是的,_mget只适用于ID。
https://stackoverflow.com/questions/34797434
复制相似问题