2016-09-27 114 views
0

我有一个elasticsearch索引,其中有很多记录。有一个外地的用户名,我想通过传递逗号分隔值,例如::Elasticsearch一个匹配查询记录

约翰,沙希德,迈克·朱莉

,我想最新的1篇文章以获得最新的1篇文章每个用户名的每个用户名。我怎样才能做到这一点?我可以通过一次传递一个用户名来实现,但会遇到太多的http请求。我想要在一个请求中完成它。

回答

0

你可以使用再加上top_hits一个过滤terms聚集,以达到你所需要的:

{ 
    "size": 0, 
    "query": { 
    "bool": { 
     "filter": { 
     "terms": { 
      "username": [ "john", "shahid", "mike", "jolie" ] 
     } 
     } 
    } 
    }, 
    "aggs": { 
    "usernames": { 
     "filter": { 
     "terms": { 
      "username": [ "john", "shahid", "mike", "jolie" ] 
     } 
     }, 
     "aggs": { 
     "by_username": { 
      "terms": { 
      "field": "username" 
      }, 
      "aggs": { 
      "top1": { 
       "top_hits": { 
       "size": 1, 
       "sort" : {"created_date" : "desc"} 
       } 
      } 
      } 
     } 
     } 
    } 
    } 
} 
+0

这个查询几乎接近我的要求,但这是给每个用户名的最旧记录。我需要最新的纪录。如何按已创建日期的desc顺序排序? –

+0

我已经更新了我的答案。 – Val

+0

现在一切正常。我只改变了bool“:{”filter“:{to bool”:“must”:[{“query_string”:{在你的代码中,因为它给出了错误。 –

0

此查询可以让您按post_date按降序排列这4个ids的所有帖子。您可以处理该数据以获得结果。

{ 
     "sort" : [ 
     { "post_date" : {"order" : "desc"}} 
     ], 
     "query" : { 
     "filtered" : { 
      "filter" : { 
      "terms" : { 
       "username" : ["john","shahid","mike","jolie] 
      } 
      } 
     } 
     } 
    } 
+0

这个查询是给20条记录为“麦克”,但没有记录的其他用户,我只需要4条记录,因为有4个用户名,每个用户有1条记录。 –

相关问题