我有一個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」:{在你的代碼中,因爲它給出了錯誤。 –