子句說明
一個關鍵詞查詢後可能會找到數以萬計的文檔,使用者不太可能瀏覽所有的文檔來擷取自己需要的資訊,有些情況下使用者感興趣的可能是一些統計的資訊。
子句文法
{
"aggs" : [
{
"group_key": "field",
"agg_fun" : ["func1", "func2"],
"agg_filter" : "filter_expression",
"agg_range" : [number1, number2],
"max_group" : number,
"order_by":"count"
}
]
}group_key:必選參數。field為要進行統計的欄位名,必須配置屬性欄位,欄位類型必須是整型或者string類型。
agg_fun:必選參數。func可以為count()、sum(id)、max(id)、min(id)、distinct_count(id)五種系統函數,含義分別為:文檔個數、對ID欄位求和、取ID欄位最大值、取ID欄位最小值、對ID進行打散統計;支援同時進行多個函數的統計;
agg_filter:選擇性參數,表示僅統計滿足特定條件的文檔,agg_filter為邏輯運算式,具體邏輯可以參考filter子句。
range:選擇性參數,表示分段統計,可用於分布統計,只支援單個range參數。表示統計number1~number2及大於number2的區間情況。不支援string類型的欄位分布統計。
max_group:選擇性參數,最大返回組數,預設為1000。
order_by:選擇性參數,參數必須為count,對統計結果進行排序,不指定預設安裝group_key字典序排序。
樣本:
簡單統計樣本
{ "aggs" : [ { "group_key": "group_id", "agg_fun" : ["sum(price)"] } ] } 返回結果樣本(只展示統計結果): { result: { facet: [ { key: "group_id", items: [ { value: 43, sum: 81 }, { value: 63, sum: 91 } ] } ] } },同時統計多項資訊
{ "aggs" : [ { "group_key": "company_id", "agg_fun" : ["sum(id)", "max(id)", "min(id)"] } ] }多groupkey統計
{ "aggs" : [ { "group_key": "group_id", "agg_fun" : ["sum(price)"] }, { "group_key": "company_id", "agg_fun" : ["count()"] } ] }只統計滿足條件的資料
#只統計price大於100的資料 { "aggs" : [ { "group_key": "group_id", "agg_fun" : ["sum(price)"], "agg_filter" : "price > 100" } ] }類精確統計
{ "aggs" : [ { "group_key": "company_id", "agg_fun" : ["distinct_count(brand)"] } ] } 註:如果統計函數為distinct_count,表示開啟類精確統計(基於HLL演算法),這種統計的精度損失通常在1%以內。注意事項
在aggregate中出現的欄位必須在定義應用結構的時候配置為屬性欄位;
aggregate結果會在搜尋節點facet節點中展示出來,具體值欄位名為agg_fun的名字,如sum、count等
該統計子句資訊展示在facet 中,需設定config子句中的format 為fulljson 格式,才會返回並展示facet 對應內容。
受引擎效能影響,aggregate統計子句預設單分區保證10w的召回量下的文檔數統計準確,超過10w的文檔數統計不保證準確,可以通過調整叢集配置來修改詞參數。
如果返回的分組數過多(max_group設定過大,比如萬層級)可能會導致查詢節點(qrs),消耗大量記憶體,出現oom的情況。