我有一个elasticsearch索引,其中有很多记录。有一个外地的用户名,我想通过传递逗号分隔值,例如::Elasticsearch一个匹配查询记录
约翰,沙希德,迈克·朱莉
,我想最新的1篇文章以获得最新的1篇文章每个用户名的每个用户名。我怎样才能做到这一点?我可以通过一次传递一个用户名来实现,但会遇到太多的http请求。我想要在一个请求中完成它。
我有一个elasticsearch索引,其中有很多记录。有一个外地的用户名,我想通过传递逗号分隔值,例如::Elasticsearch一个匹配查询记录
约翰,沙希德,迈克·朱莉
,我想最新的1篇文章以获得最新的1篇文章每个用户名的每个用户名。我怎样才能做到这一点?我可以通过一次传递一个用户名来实现,但会遇到太多的http请求。我想要在一个请求中完成它。
你可以使用再加上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"}
}
}
}
}
}
}
}
}
此查询可以让您按post_date按降序排列这4个ids的所有帖子。您可以处理该数据以获得结果。
{
"sort" : [
{ "post_date" : {"order" : "desc"}}
],
"query" : {
"filtered" : {
"filter" : {
"terms" : {
"username" : ["john","shahid","mike","jolie]
}
}
}
}
}
这个查询是给20条记录为“麦克”,但没有记录的其他用户,我只需要4条记录,因为有4个用户名,每个用户有1条记录。 –
这个查询几乎接近我的要求,但这是给每个用户名的最旧记录。我需要最新的纪录。如何按已创建日期的desc顺序排序? –
我已经更新了我的答案。 – Val
现在一切正常。我只改变了bool“:{”filter“:{to bool”:“must”:[{“query_string”:{在你的代码中,因为它给出了错误。 –