子句說明
一個關鍵詞查詢后可能會找到數以萬計的文檔,用戶不太可能瀏覽所有的文檔來獲取自己需要的信息,有些情況下用戶感興趣的可能是一些統計的信息。
子句語法
aggregate=group_key:field, range:number1~number2, agg_fun:func1#func2, max_group:number2, agg_filter:filter_clause, max_group:number
group_key:必選參數。field為要進行統計的字段名,必須配置屬性字段,字段類型必須是整形或者string。
agg_fun:必選參數。func可以為count()、sum(id)、max(id)、min(id)四種系統函數,含義分別為:文檔個數、對ID字段求和、取ID字段最大值、取ID字段最小值;支持同時進行多個函數的統計,中間用英文井號(#)分隔;sum、max、min的內容支持基本的算術運算;
range:表示分段統計,可用于分布統計,只支持單個range參數。表示number1~number2及大于number2的區間情況。不支持string類型的字段分布統計。
agg_filter:非必須參數,表示僅統計滿足特定條件的文檔;
agg_sampler_threshold:非必須參數,抽樣統計的閾值。表示該值之前的文檔會依次統計,該值之后的文檔會進行抽樣統計;
agg_sampler_step:非必須參數,抽樣統計的步長。表示從agg_sampler_threshold后的文檔將間隔agg_sampler_step個文檔統計一次。對于sum和count類型的統計會把閾值后的抽樣統計結果最后乘以步長進行估算,估算的結果再加上閾值前的統計結果就是最后的統計結果。
max_group:最大返回組數,默認為1000。
示例:
簡單統計示例
aggregate=group_key:group_id,agg_fun:sum(price)
返回結果示例(只展示統計結果):
{
result: {
facet: [
{
key: "group_id",
items: [
{
value: 43,
sum: 81
},
{
value: 63,
sum: 91
}
]
}
]
}
},
抽樣統計
aggregate=group_key:company_id,agg_fun:count(),agg_sampler_threshold:5,agg_sampler_step:2
注:中抽樣的閾值為5,步長為2,前5個命中的文檔會依次統計,從第6個文檔開始每隔1個文檔進行抽樣統計。對于sum和count類型的統計會把從第6個文檔開始的抽樣統計結果最后乘以步長進行估算,估算的結果再加上伐值前的統計結果就是最后的統計結果。
同時統計多項信息
aggregate=group_key:company_id,agg_fun:sum(id)#max(id)#min(id)
注:同時獲取company_id中id之和,最大值及最小值,多個function函數之間用'#'拼接
多groupkey統計
aggregate=group_key:id,agg_fun:sum(price)&&aggregate=group_key:company_id,agg_fun:count(),agg_sampler_threshold:5, agg_sampler_step:2
注:可以支持多個統計子句,多個統計子句之間使用'&&'拼接
精確統計
config=cluster:general.default_agg&&aggregate=group_key:company_id,agg_fun:count()
注:指定cluster為clusterName連接'.default_agg',表示開啟精確統計,精確統計也是受限于rank_size,在rank_size范圍之內是精確的。如果滿足條件的文檔個數遠大于rank_size,大于的部分是不會參與統計的。
類精確統計
aggregate=group_key:company_id,agg_fun:distinct_count(brand)
注:如果統計函數為distinct_count,表示開啟類精確統計(基于HLL算法),這種統計的精度損失通常在1%以內。
注意事項
aggregate為非必選子句;
在aggregate中出現的字段必須在定義應用結構的時候配置為屬性字段;
aggregate結果會在搜索節點facet節點中展示出來,具體值字段名為agg_fun的名字,如sum、count等
aggregate支持多個key的統計,多個統計中間用英文分號(;)分隔。
該統計子句信息展示在facet 中,需設置config子句中的format 為fulljson 格式,才會返回并展示facet 對應內容。
受引擎性能影響,aggregate統計子句僅能保證10w的召回量下的文檔數統計準確,超過10w的文檔數統計不保證準確。