aggregate子句
子句說明
一個關(guān)鍵詞查詢后可能會找到數(shù)以萬計的文檔,用戶不太可能瀏覽所有的文檔來獲取自己需要的信息,有些情況下用戶感興趣的可能是一些統(tǒng)計的信息。
語法說明
統(tǒng)計子句格式:
group_key:field, range:number1~number2, agg_fun:func1#func2, max_group:number2,
agg_filter:filter_clause, max_group:number
參數(shù)介紹:
參數(shù) | 類型 | 必需 | 取值范圍 | 默認(rèn)值 | 描述 |
group_key:field | field為屬性字段 | 必選參數(shù) | 目前只支持對 INT,LITERAL,INT_ARRAY,LITERAL_ARRAY 字段類型做統(tǒng)計(注意 INT_ARRAY,LITERAL_ARRAY 這2個字段類型做統(tǒng)計時,以該字段中相同值為單位進(jìn)行統(tǒng)計) | field為要進(jìn)行統(tǒng)計的字段名,必須配置屬性字段 | |
agg_fun | 必選參數(shù) | count()、sum(id)、max(id)、min(id)、 distinct_count五種系統(tǒng)函數(shù) | func可以為count()、sum(id)、max(id)、min(id)、distinct_count(id)五種系統(tǒng)函數(shù),含義分別為:統(tǒng)計文檔個數(shù)、對id字段進(jìn)行求和、獲取id字段最大值、獲取id字段最小值、獲取id的去重統(tǒng)計個數(shù);支持同時進(jìn)行多個函數(shù)的統(tǒng)計,中間用英文井號(#)分隔;sum、max、min的內(nèi)容支持基本的算術(shù)運(yùn)算 | ||
range | 非必須參數(shù) | 表示number1~number2及大于number2的區(qū)間情況(注:不支持string類型的字段分布統(tǒng)計) | 表示分段統(tǒng)計,可用于分布統(tǒng)計,只支持單個range參數(shù)。 | ||
agg_filter | 非必須參數(shù) | 表示僅統(tǒng)計滿足特定條件的文檔 | |||
agg_sampler_threshold | int類型 | 非必須參數(shù) | ,抽樣統(tǒng)計的閾值。表示該值之前的文檔會依次統(tǒng)計,該值之后的文檔會進(jìn)行抽樣統(tǒng)計; | ||
agg_sampler_step | int類型 | 非必須參數(shù) | 抽樣統(tǒng)計的步長,表示從agg_sampler_threshold后的文檔將間隔agg_sampler_step個文檔統(tǒng)計一次。對于sum和count類型的統(tǒng)計會把閾值后的抽樣統(tǒng)計結(jié)果最后乘以步長進(jìn)行估算,估算的結(jié)果再加上閾值前的統(tǒng)計結(jié)果就是最后的統(tǒng)計結(jié)果。 | ||
max_group | int類型 | 非必須參數(shù) | 1000 | 最大返回組數(shù) |
注意事項
aggregate為非必選子句;
在aggregate中出現(xiàn)的字段必須在定義應(yīng)用結(jié)構(gòu)的時候配置為屬性字段;
aggregate結(jié)果會在搜索節(jié)點(diǎn)facet節(jié)點(diǎn)中展示出來,具體值字段名為agg_fun的名字,如sum、count等
aggregate支持多個key的統(tǒng)計,多個統(tǒng)計中間用英文分號(;)分隔。
參考格式:
group_key:field1,agg_fun:func1;group_key:field2,agg_fun:func2
該統(tǒng)計子句信息展示在facet 中,需設(shè)置config子句中的format 為fulljson 格式,才會返回并展示facet 對應(yīng)內(nèi)容。
distinct_count功能,僅在獨(dú)享-集群中支持,同時需要在kvpairs子句中加入
enable_accurate_statistics:true
參數(shù),使用distinct_count功能,查詢將不再召回具體的結(jié)果數(shù)據(jù),只有facet中的統(tǒng)計數(shù)據(jù)獨(dú)享集群中,支持count、max、min和sum的精確統(tǒng)計,需要在kvpairs子句中加入
enable_accurate_statistics:true
參數(shù)受引擎性能影響,aggregate統(tǒng)計子句僅能保證10w的召回量下的文檔數(shù)統(tǒng)計準(zhǔn)確,超過10w的文檔數(shù)統(tǒng)計不保證準(zhǔn)確。(獨(dú)享-集群,可通過在kvpairs子句中加入enable_accurate_statistics:true參數(shù),提高統(tǒng)計的精確度)
示例
搜索包含“浙大”的文檔,并按照group_id字段進(jìn)行統(tǒng)計,統(tǒng)計維度包含對price字段進(jìn)行求和及計算最大值;并對company_id進(jìn)行統(tǒng)計個數(shù):
query=default:'浙大'&&aggregate=group_key:group_id,agg_fun:sum(price)#max(price);group_key:company_id,agg_fun:count()
結(jié)果展示:
{ status: "OK", result: { searchtime: 0.015634, total: 5, num: 1, viewtotal: 5, items: [ //具體搜索結(jié)果 { ... } ], facet: [ { key: "group_id", items: [ { value: 43, sum: 81, max: 20, }, { value: 63, sum: 91, max: 50, }, ], }, { key: "company_id", items: [ { value: 13, count: 4, }, { value: 10, count: 1, }, ], }, ], }, errors: [ ], tracer: "", },
搜索包含“浙大”的文檔,并按照group_id字段進(jìn)行統(tǒng)計,統(tǒng)計維度包含對price字段進(jìn)行求和。其中10000以后的文檔進(jìn)行抽樣,步長為5:
query=default:'浙大'&&aggregate=group_key:group_id,agg_fun:sum(price), agg_sampler_threshold:10000, agg_sampler_step:5
搜索包含“浙大”的文檔,并按照group_id字段進(jìn)行統(tǒng)計個數(shù),統(tǒng)計維度為小于10、10~50、及大于50的文檔數(shù):
query=default:'浙大'&&aggregate=group_key:group_id,agg_fun:count(),range:10~50
搜索包含“浙大”的文檔,并按照group_id字段進(jìn)行統(tǒng)計hits及replies的和的最大值,僅統(tǒng)計create_timestamp大于1423456781的文檔:
query=default:'浙大'&&aggregate=group_key:group_id,agg_fun:max(hits+replies),agg_filter:create_timestamp>1423456781