2016-09-27 184 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條記錄。 –