全部產品
Search
文件中心

OpenSearch:aggregate子句

更新時間:Jul 13, 2024

子句說明

一個關鍵詞查詢後可能會找到數以萬計的文檔,使用者不太可能瀏覽所有的文檔來擷取自己需要的資訊,有些情況下使用者感興趣的可能是一些統計的資訊。

文法說明

統計子句格式

group_key:field, range:number1~number2, agg_fun:func1#func2, max_group:number2, 
agg_filter:filter_clause, max_group:number

參數介紹

參數

類型

必需

取值範圍

預設值

描述

group_key:field

field為屬性欄位

必選參數

目前只支援對 INT,LITERAL,INT_ARRAY,LITERAL_ARRAY 欄位類型做統計(注意 INT_ARRAY,LITERAL_ARRAY 這2個欄位類型做統計時,以該欄位中相同值為單位進行統計)

field為要進行統計的欄位名,必須配置屬性欄位

agg_fun

必選參數

count(id)、sum(id)、max(id)、min(id)、distinct_count(id)五種系統函數

func可以為count()、sum(id)、max(id)、min(id)、distinct_count(id)五種系統函數,含義分別為:統計文檔個數、對id欄位進行求和、擷取id欄位最大值、擷取id欄位最小值、擷取id的去重統計個數;支援同時進行多個函數的統計,中間用英文井號(#)分隔;sum、max、min的內容支援基本的算術運算

range

非必須參數

表示number1~number2及大於number2的區間情況(註:不支援string類型的欄位分布統計)

表示分段統計,可用於分布統計,只支援單個range參數。

agg_filter

非必須參數

表示僅統計滿足特定條件的文檔

agg_sampler_threshold

int類型

非必須參數

,抽樣統計的閾值。表示該值之前的文檔會依次統計,該值之後的文檔會進行抽樣統計;

agg_sampler_step

int類型

非必須參數

抽樣統計的步長,表示從agg_sampler_threshold後的文檔將間隔agg_sampler_step個文檔統計一次。對於sum和count類型的統計會把閾值後的抽樣統計結果最後乘以步長進行估算,估算的結果再加上閾值前的統計結果就是最後的統計結果。

max_group

int類型

非必須參數

1000

最大返回組數

注意事項

  • aggregate為非必選子句;

  • 在aggregate中出現的欄位必須在定義應用結構的時候配置為屬性欄位

  • aggregate結果會在搜尋節點facet節點中展示出來,具體值欄位名為agg_fun的名字,如sum、count等

  • aggregate支援多個key的統計,多個統計中間用英文分號(;)分隔。參考格式:group_key:field1,agg_fun:func1;group_key:field2,agg_fun:func2

  • 統計子句資訊需要將config子句中的format 設定為fulljson,才會在返回結果中的facet節點中展示

  • distinct_count功能,僅在獨享-叢集支援,同時需要在kvpairs子句中加入enable_accurate_statistics:true參數,使用distinct_count功能,查詢將不再召回具體的結果資料,只有facet中的統計資料

  • 獨享叢集中,支援count、max、min和sum的精確統計,需要在kvpairs子句中加入enable_accurate_statistics:true參數

  • 受引擎效能影響,aggregate統計子句僅能保證10w的召回量下的文檔數統計準確,超過10w的文檔數統計不保證準確。(獨享-叢集,可通過在kvpairs子句中加入enable_accurate_statistics:true參數,提高統計的精確度)

樣本

  1. 搜尋包含“浙大”的文檔,並按照group_id欄位進行統計,統計維度包含對price欄位進行求和及計算最大值;並對company_id進行統計個數:

    query=default:'浙大'&&aggregate=group_key:group_id,agg_fun:sum(price)#max(price);group_key:company_id,agg_fun:count()

    結果展示

    {
      status: "OK",
      result: {
        searchtime: 0.015634,
        total: 5,
        num: 1,
        viewtotal: 5,
        items: [        //具體搜尋結果
          { ... }
        ],
        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: "",
    },
  2. 搜尋包含“浙大”的文檔,並按照group_id欄位進行統計,統計維度包含對price欄位進行求和。其中10000以後的文檔進行抽樣,步長為5:

    query=default:'浙大'&&aggregate=group_key:group_id,agg_fun:sum(price), agg_sampler_threshold:10000, agg_sampler_step:5
  3. 搜尋包含“浙大”的文檔,並按照group_id欄位進行統計個數,統計維度為小於10、10~50、及大於50的文檔數:

    query=default:'浙大'&&aggregate=group_key:group_id,agg_fun:count(),range:10~50
  4. 搜尋包含“浙大”的文檔,並按照group_id欄位進行統計hits及replies的和的最大值,僅統計create_timestamp大於1423456781的文檔:

    query=default:'浙大'&&aggregate=group_key:group_id,agg_fun:max(hits+replies),agg_filter:create_timestamp>1423456781