2014-02-14 73 views
6

我想從我的數據集中計算不同的字段值。例如:術語聚合的唯一計數

terms聚合給我的發生次數username。我只想計算唯一的用戶名,並非全部。

這裏是我的要求:

POST appzz/messages/_search 
{ 
    "aggs": { 
     "words": { 
     "terms": { 
      "field": "username" 
     } 
     } 
    }, 
    "size": 0, 
    "from": 0 
} 

是否有unique選項或類似的東西?

+0

那麼這裏的判決是什麼?似乎@ Jeffrey'jf'Lim的建議應該是正確的(至少,這是我的直覺)。另一方面,'基數'似乎是實驗性的,因此不可信:) – Dror

回答

2

在最近的Elasticsearch聚會上,我們與ES人員之一進行了長時間的討論。簡短的答案是否定的,沒有。據他說,這不是很快就會有的事情。

要做到這一點的一個選擇是獲得所有條款(給出一個非常大的限制)並計算返回多少條款,但是如果您有許多獨特的條款,它會很昂貴並且並不真正有效。

+0

感謝您的信息。 –

0

我對ES還是比較陌生的,但是如果我能正確地得到你的答案,看起來你應該能夠通過簡單計算響應中返回的桶的數量來得到答案。 (見http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html

注意,雖然:相反到什麼文檔,現在說有大小爲0(「這是可以不限制由設置大小爲0返回的項數」) ,我使用最新版本(現在1.0.1)進行了測試,結果顯示這不起作用! 與此相反,設置大小爲0會給你0桶!如果你想要獲得所有的條件,你應該設置(嘆氣)尺寸爲一些任意高的數字。

編輯:哎呦,我的壞!我只是重新閱讀文檔,只是注意到那裏的版本說明,並意識到這只是在1.1.0版本中出現的?這個筆記是過去式(「在1.1.0中增加」),這是令人困惑的,但我猜1.1.0還沒有發佈......

哦,順便說一句,似乎有你的網址有問題嗎?我希望你知道這一點。

7

您正在尋找在Elasticsearch 1.1中添加的cardinality aggregation。它允許你請求這樣的事情:

{ 
    "aggs" : { 
     "unique_users" : { 
      "cardinality" : { 
       "field" : "username" 
      } 
     } 
    } 
} 
+0

如何在URL中使用基數? – satheesh

1

@DerMiggel:我嘗試使用基數爲我的項目。在我的本地系統中出現了大約2,00,000個文檔的總轉儲量,我嘗試了precision_threshold爲100,0和40,000(作爲最大值)的基數。前兩次,結果是不同的(分別爲175和184)以及40,000個內存異常。與其他aggs相比,計算時間也很大。因此,我覺得基數並不是那麼正確,並且在需要高準確度和精確度時可能會使系統崩潰。