0

我們想聚合一些價值。舉例來說,假設我們正在爲在組織中註冊的用戶編制索引。彈性搜索聚合和範圍

我們想要得到的註冊用戶計數分裂樣:

    從Gmail註冊
  • :900
  • 通過FB註冊:800
  • 通過雅虎註冊:700
  • 通過自己的應用程序註冊: 1500
  • 通過其他人註冊:1600

預計我們需要將0到1000個用戶(gmail,fb,yahoo - 3個應用程序)和1001到2000(自己的應用程序,其他應用程序 - 2個應用程序)存儲在一起。

我們如何在彈性搜索中實現這一點?有什麼建議麼 ?

感謝

回答

0

比方說,你在創建索引的用戶對象是這樣的:

POST users/user 
{ 
    "login":"user1", 
    "organization":"fb" 
} 

您試圖通過他們的organization價值收集您用戶。爲此,您必須使用terms彙總。

您的查詢將是這樣的:

POST users/_search?search_type=count 
{ 
    "aggs": { 
    "by_organization": { 
     "terms": { 
     "field": "organization" 
     } 
    } 
    } 
} 

注:SEARCH_TYPE =計數這裏只具有較短的響應,結果命中將不予退還(見here)。

你的搜索響應將是這樣的:

{ 
    (...) 
    "aggregations": { 
     "by_organization": { 
     "doc_count_error_upper_bound": 0, 
     "sum_other_doc_count": 0, 
     "buckets": [ 
      { 
       "key": "app", 
       "doc_count": 4 
      }, 
      { 
       "key": "fb", 
       "doc_count": 3 
      }, 
      { 
       "key": "gmail", 
       "doc_count": 2 
      } 
     ] 
     } 
    } 
} 

你可以看到對應每個組織價值桶。

注意:

  • 只有頂端10桶默認情況下將返回(見terms聚集size參數)
  • 這個簡單的例子可以作爲組織價值觀很簡單,但在實際生活中,您必須將您的組織字段設置爲not_analyzed以便彙總原始值(而不是通過分析獲得的條款)

我強烈邀請你可以閱讀更多關於分析和terms聚合documentation

+0

實際上我們得到的值是像(app-51,fb-100,gmail-30,other-15)這樣的聚合值。現在我們需要將值分成0到50個用戶(gmail和其他) .51到100個用戶(app和fb)。我們需要挖掘這些值。是否有可能? – Vijay 2015-03-13 13:15:43

+0

現在,我認爲這是不可能的:你將不得不在應用程序端做到這一點。但是,它計劃成爲v2的一部分。0(參見[相關問題](https://github.com/elastic/elasticsearch/issues/9876))。 – ThomasC 2015-03-13 13:35:01

+0

感謝您的信息Thomas Cucchietti。 – Vijay 2015-03-16 05:05:21