日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

統計聚合

使用統計聚合功能可以實現求最小值、求最大值、求和、求平均值、統計行數、去重統計行數、按字段值分組、按范圍分組、按地理位置分組、按過濾條件分組等操作;同時多個統計聚合功能可以組合使用,滿足復雜的查詢需求。

流程

統計聚合的完整執行流程如下圖所示。

fig_agg_pro

統計聚合是在服務端的“查詢”結束后執行,服務端會將“查詢”階段命中的所有文檔根據查詢請求進行統計聚合,因此統計聚合請求相比沒有統計聚合的請求會復雜。

背景信息

統計聚合的詳細功能請參見下表。

功能

說明

最小值

返回一個字段中的最小值,類似于SQL中的min。

最大值

返回一個字段中的最大值,類似于SQL中的max。

返回數值字段的總數,類似于SQL中的sum。

平均值

返回數值字段的平均值,類似于SQL中的avg。

統計行數

返回指定字段值的數量或者多元索引數據總行數,類似于SQL中的count。

去重統計行數

返回指定字段不同值的數量,類似于SQL中的count(distinct)。

百分位統計

百分位統計常用來統計一組數據的百分位分布情況,例如在日常系統運維中統計每次請求訪問的耗時情況時,需要關注系統請求耗時的P25、P50、P90、P99值等分布情況。

TopRows

基于特定字段排序的TopRows統計。

字段值分組

根據一個字段的值對查詢結果進行分組,相同的字段值放到同一分組內,返回每個分組的值和該值對應的個數。

說明

當分組較大時,按字段值分組可能會存在誤差。

范圍分組

根據一個字段的范圍對查詢結果進行分組,字段值在某范圍內放到同一分組內,返回每個范圍中相應的item個數。

地理位置分組

根據距離某一個中心點的范圍對查詢結果進行分組,距離差值在某范圍內放到同一分組內,返回每個范圍中相應的item個數。

過濾條件分組

按照過濾條件對查詢結果進行分組,獲取每個過濾條件匹配到的數量,返回結果的順序和添加過濾條件的順序一致。

直方圖統計

按照指定數據間隔對查詢結果進行分組,字段值在相同范圍內放到同一分組內,返回每個分組的值和該值對應的個數。

嵌套

分組類型的統計聚合功能支持嵌套,其內部可以添加子統計聚合。

前提條件

  • 已初始化OTSClient。具體操作,請參見初始化。
  • 已創建數據表并寫入數據。
  • 已在數據表上創建多元索引。具體操作,請參見創建多元索引。

最小值

返回一個字段中的最小值,類似于SQL中的min。

  • 參數

    參數

    說明

    name

    自定義的統計聚合名稱,用于區分不同的統計聚合,可根據此名稱獲取本次統計聚合結果。

    field_name

    用于統計聚合的字段,僅支持Long、Double和Date類型。

    missing

    當某行數據中的字段為空時,字段值的默認值。

    • 如果未設置missing值,則在統計聚合時會忽略該行。

    • 如果設置了missing值,則使用missing值作為字段值的默認值參與統計聚合。

  • 示例

    $request = array(
        'table_name' => 'myTableName',
        'index_name' => 'myIndexName',
        'search_query' => array(
            'offset' => 0,
            'limit' => 0,
            'get_total_count' => true,
            'query' => array(
                'query_type' => QueryTypeConst::MATCH_ALL_QUERY
            ),
            'aggs' => array(
                'aggs' => array(
                    array(
                        'name' => 'agg_min',
                        'type' => AggregationTypeConst::AGG_MIN,
                        'body' => array(
                            'field_name' => 'long',
                            'missing' => 0
                        )
                    ),
                ),
            )
        ),
        'columns_to_get' => array(
            'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX,
        ),
    );
    
    $response = $this->otsClient->search($request);
    $agg_results = $response["aggs"]["agg_results"];
    
    print json_encode($agg_results, JSON_PRETTY_PRINT);

最大值

返回一個字段中的最大值,類似于SQL中的max。

  • 參數

    參數

    說明

    name

    自定義的統計聚合名稱,用于區分不同的統計聚合,可根據此名稱獲取本次統計聚合結果。

    field_name

    用于統計聚合的字段,僅支持Long、Double和Date類型。

    missing

    當某行數據中的字段為空時,字段值的默認值。

    • 如果未設置missing值,則在統計聚合時會忽略該行。

    • 如果設置了missing值,則使用missing值作為字段值的默認值參與統計聚合。

  • 示例

    $request = array(
        'table_name' => 'myTableName',
        'index_name' => 'myIndexName',
        'search_query' => array(
            'offset' => 0,
            'limit' => 0,
            'get_total_count' => true,
            'query' => array(
                'query_type' => QueryTypeConst::MATCH_ALL_QUERY
            ),
            'aggs' => array(
                'aggs' => array(
                    array(
                        'name' => 'agg_max',
                        'type' => AggregationTypeConst::AGG_MAX,
                        'body' => array(
                            'field_name' => 'long',
                            'missing' => 0
                        )
                    ),
                ),
            )
        ),
        'columns_to_get' => array(
            'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX,
        ),
    );
    
    $response = $this->otsClient->search($request);
    $agg_results = $response["aggs"]["agg_results"];
    
    print json_encode($agg_results, JSON_PRETTY_PRINT);

返回數值字段的總數,類似于SQL中的sum。

  • 參數

    參數

    說明

    name

    自定義的統計聚合名稱,用于區分不同的統計聚合,可根據此名稱獲取本次統計聚合結果。

    field_name

    用于統計聚合的字段,僅支持Long和Double類型。

    missing

    當某行數據中的字段為空時,字段值的默認值。

    • 如果未設置missing值,則在統計聚合時會忽略該行。

    • 如果設置了missing值,則使用missing值作為字段值的默認值參與統計聚合。

  • 示例

    $request = array(
        'table_name' => 'myTableName',
        'index_name' => 'myIndexName',
        'search_query' => array(
            'offset' => 0,
            'limit' => 0,
            'get_total_count' => true,
            'query' => array(
                'query_type' => QueryTypeConst::MATCH_ALL_QUERY
            ),
            'aggs' => array(
                'aggs' => array(
                    array(
                        'name' => 'agg_sum',
                        'type' => AggregationTypeConst::AGG_SUM,
                        'body' => array(
                            'field_name' => 'long',
                            'missing' => 0
                        )
                    ),
                ),
            )
        ),
        'columns_to_get' => array(
            'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX,
        ),
    );
    
    $response = $this->otsClient->search($request);
    $agg_results = $response["aggs"]["agg_results"];
    
    print json_encode($agg_results, JSON_PRETTY_PRINT);

平均值

返回數值字段的平均值,類似于SQL中的avg。

  • 參數

    參數

    說明

    name

    自定義的統計聚合名稱,用于區分不同的統計聚合,可根據此名稱獲取本次統計聚合結果。

    field_name

    用于統計聚合的字段,僅支持Long、Double和Date類型。

    missing

    當某行數據中的字段為空時,字段值的默認值。

    • 如果未設置missing值,則在統計聚合時會忽略該行。

    • 如果設置了missing值,則使用missing值作為字段值的默認值參與統計聚合。

  • 示例

    $request = array(
        'table_name' => 'myTableName',
        'index_name' => 'myIndexName',
        'search_query' => array(
            'offset' => 0,
            'limit' => 0,
            'get_total_count' => true,
            'query' => array(
                'query_type' => QueryTypeConst::MATCH_ALL_QUERY
            ),
            'aggs' => array(
                'aggs' => array(
                    array(
                        'name' => 'agg_avg',
                        'type' => AggregationTypeConst::AGG_AVG,
                        'body' => array(
                            'field_name' => 'long',
                            'missing' => 0
                        )
                    ),
                ),
            )
        ),
        'columns_to_get' => array(
            'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX,
        ),
    );
    
    $response = $this->otsClient->search($request);
    $agg_results = $response["aggs"]["agg_results"];
    
    print json_encode($agg_results, JSON_PRETTY_PRINT);

統計行數

返回指定字段值的數量或者多元索引數據總行數,類似于SQL中的count。

說明

通過如下方式可以統計多元索引數據總行數或者某個query匹配的行數。

  • 使用統計聚合的count功能,在請求中設置count(*)。

  • 使用query功能的匹配行數,在query中設置setGetTotalCount(true);如果需要統計多元索引數據總行數,則使用MatchAllQuery。

如果需要獲取多元索引數據某列出現的次數,則使用count(列名),可應用于稀疏列的場景。

  • 參數

    參數

    說明

    name

    自定義的統計聚合名稱,用于區分不同的統計聚合,可根據此名稱獲取本次統計聚合結果。

    field_name

    用于統計聚合的字段,僅支持Long、Double、Boolean、Keyword、Geo_point和Date類型。

  • 示例

    $request = array(
        'table_name' => 'myTableName',
        'index_name' => 'myIndexName',
        'search_query' => array(
            'offset' => 0,
            'limit' => 0,
            'get_total_count' => true,
            'query' => array(
                'query_type' => QueryTypeConst::MATCH_ALL_QUERY
            ),
            'aggs' => array(
                'aggs' => array(
                    array(
                        'name' => 'agg_count',
                        'type' => AggregationTypeConst::AGG_COUNT,
                        'body' => array(
                            'field_name' => 'long',
                            'missing' => 0
                        )
                    ),
                ),
            )
        ),
        'columns_to_get' => array(
            'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX,
        ),
    );
    
    $response = $this->otsClient->search($request);
    $agg_results = $response["aggs"]["agg_results"];
    
    print json_encode($agg_results, JSON_PRETTY_PRINT);

去重統計行數

返回指定字段不同值的數量,類似于SQL中的count(distinct)。

說明

去重統計行數的計算結果是個近似值。

  • 當去重統計行數小于1萬時,計算結果接近精確值。

  • 當去重統計行數達到1億時,計算結果的誤差為2%左右。

  • 參數

    參數

    說明

    name

    自定義的統計聚合名稱,用于區分不同的統計聚合,可根據此名稱獲取本次統計聚合結果。

    field_name

    用于統計聚合的字段,僅支持Long、Double、Boolean、Keyword、Geo_point和Date類型。

    missing

    當某行數據中的字段為空時,字段值的默認值。

    • 如果未設置missing值,則在統計聚合時會忽略該行。

    • 如果設置了missing值,則使用missing值作為字段值的默認值參與統計聚合。

  • 示例

    $request = array(
        'table_name' => 'myTableName',
        'index_name' => 'myIndexName',
        'search_query' => array(
            'offset' => 0,
            'limit' => 0,
            'get_total_count' => true,
            'query' => array(
                'query_type' => QueryTypeConst::MATCH_ALL_QUERY
            ),
            'aggs' => array(
                'aggs' => array(
                    array(
                        'name' => 'agg_distinct_count',
                        'type' => AggregationTypeConst::AGG_DISTINCT_COUNT,
                        'body' => array(
                            'field_name' => 'boolean',
                            'missing' => false
                        )
                    ),
                ),
            )
        ),
        'columns_to_get' => array(
            'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX,
        ),
    );
    
    $response = $this->otsClient->search($request);
    $agg_results = $response["aggs"]["agg_results"];
    
    print json_encode($agg_results, JSON_PRETTY_PRINT);

百分位統計

百分位統計常用來統計一組數據的百分位分布情況,例如在日常系統運維中統計每次請求訪問的耗時情況時,需要關注系統請求耗時的P25、P50、P90、P99值等分布情況。

說明

百分位統計為非精確統計,對不同百分位數值的計算精確度不同,較為極端的百分位數值更加準確,例如1%或99%的百分位數值會比50%的百分位數值準確。

  • 參數

    參數

    說明

    name

    自定義的統計聚合名稱,用于區分不同的統計聚合,可根據此名稱獲取本次統計聚合結果。

    field_name

    用于統計聚合的字段,僅支持Long、Double和Date類型。

    percentiles

    百分位分布例如50、90、99,可根據需要設置一個或者多個百分位。

    missing

    當某行數據中的字段為空時,字段值的默認值。

    • 如果未設置missing值,則在統計聚合時會忽略該行。

    • 如果設置了missing值,則使用missing值作為字段值的默認值參與統計聚合。

  • 示例

    $request = array(
        'table_name' => 'myTableName',
        'index_name' => 'myIndexName',
        'search_query' => array(
            'offset' => 0,
            'limit' => 0,
            'get_total_count' => true,
            'query' => array(
                'query_type' => QueryTypeConst::MATCH_ALL_QUERY
            ),
            'aggs' => array(
                'aggs' => array(
                    array(
                        'name' => 'agg_percentiles',
                        'type' => AggregationTypeConst::AGG_PERCENTILES,
                        'body' => array(
                            'field_name' => 'long',
                            'percentiles' => array(60, 80, 100),
                            'missing' => 0
                        )
                    ),
                ),
            )
        ),
        'columns_to_get' => array(
            'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX,
        ),
    );
    
    $response = $this->otsClient->search($request);
    $agg_results = $response["aggs"]["agg_results"];
    
    print json_encode($agg_results, JSON_PRETTY_PRINT);

TopRows

基于特定字段排序的TopRows統計。

通過GroupBy功能對查詢結果進行分組后,獲取每個分組內的一些行數據,可實現和MySQL中ANY_VALUE(field)類似的功能。

  • 參數

    參數

    說明

    name

    自定義的統計聚合名稱,用于區分不同的統計聚合,可根據此名稱獲取本次統計聚合結果。

    limit

    Top N的個數。

    sort

    行排序規則,基于該排序下返回的TopRows。

    columns_to_get

    指定返回的字段,僅支持多元索引中的字段,且不支持數組、Date、Geopoint和Nested類型的字段。

    該參數復用request中的columns_to_get參數,在request中指定columns_to_get即可。

    說明

    獲取統計聚合分組中的行時,如果多元索引中包含嵌套類型、地理位置類型或者數組類型的字段,則返回結果中只會包含主鍵信息,請手動反查數據表獲取所需字段。

  • 示例

    $request = array(
        'table_name' => 'myTableName',
        'index_name' => 'myIndexName',
        'search_query' => array(
            'offset' => 0,
            'limit' => 0,
            'get_total_count' => true,
            'query' => array(
                'query_type' => QueryTypeConst::MATCH_ALL_QUERY
            ),
              'aggs' => array(
            'aggs' => array(
                    array(
                        'name' => 'avg_top_rows',
                        'type' => AggregationTypeConst::AGG_TOP_ROWS,
                        'body' => array(
                            'limit' => 2,
                            'sort' => array(
                                'sorters' => array(
                                    array(
                                        'field_sort' => array(
                                            'field_name' => 'long',
                                            'order' => SortOrderConst::SORT_ORDER_DESC
                                        )
                                    )
                                )
                            )
                        )
                    ),
                ),
            )
        ),
        'columns_to_get' => array(
            'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX,
        ),
    );
    
    $response = $this->otsClient->search($request);
    $agg_results = $response["aggs"]["agg_results"];
    
    print json_encode($agg_results, JSON_PRETTY_PRINT);

字段值分組

根據一個字段的值對查詢結果進行分組,相同的字段值放到同一分組內,返回每個分組的值和該值對應的個數。

說明

當分組較大時,按字段值分組可能會存在誤差。

  • 參數

    參數

    說明

    name

    自定義的統計聚合名稱,用于區分不同的統計聚合,可根據此名稱獲取本次統計聚合結果。

    field_name

    用于統計聚合的字段,僅支持Long、Double、Boolean、Keyword和Date類型。

    sort

    分組中的item排序規則,默認按照分組中item的數量降序排序,多個排序則按照添加的順序進行排列。支持的參數如下。

    • 按照值的字典序升序排列

    • 按照值的字典序降序排列

    • 按照行數升序排列

    • 按照行數降序排列

    • 按照子統計聚合結果中值升序排列

    • 按照子統計聚合結果中值降序排列

    size

    返回的分組數量,默認值為10。最大值為2000。當分組數量超過2000時,只會返回前2000個分組。

    sub_aggs和sub_group_bys

    子統計聚合,子統計聚合會根據分組內容再進行一次統計聚合分析。

    • 場景

      統計每個類別的商品數量,且統計每個類別價格的最大值和最小值。

    • 方法

      最外層的統計聚合是根據類別進行分組,再添加兩個子統計聚合求價格的最大值和最小值。

    • 結果示例

      • 水果:5個(其中價格的最大值為15,最小值為3)

      • 洗漱用品:10個(其中價格的最大值為98,最小值為1)

      • 電子設備:3個(其中價格的最大值為8699,最小值為2300)

      • 其它:15個(其中價格的最大值為1000,最小值為80)

  • 示例

    $request = array(
        'table_name' => 'myTableName',
        'index_name' => 'myIndexName',
        'search_query' => array(
            'offset' => 0,
            'limit' => 0,
            'get_total_count' => true,
            'query' => array(
                'query_type' => QueryTypeConst::MATCH_ALL_QUERY
            ),
            'group_bys' => array(
                'group_bys' => array(
                    array(
                        'name' => 'group_by_GROUP_BY_FIELD',
                        'type' => GroupByTypeConst::GROUP_BY_FIELD,
                        'body' => array(
                            'field_name' => 'boolean',
                            'size' => 3,
                            'min_doc_count' => 0,
                            'sort' => array(
                                'sorters' => array(
                                    array(
                                        'group_key_sort' => array(
                                            'order' => SortOrderConst::SORT_ORDER_DESC
                                        ),
                                    ),
                                )
                            ),
                        )
                    ),
                ),
            )
        ),
        'columns_to_get' => array(
            'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX,
        ),
    );
    
    $response = $this->otsClient->search($request);
    $group_by_results = $response["group_bys"]["group_by_results"];
    
    print json_encode($group_by_results, JSON_PRETTY_PRINT);

范圍分組

根據一個字段的范圍對查詢結果進行分組,字段值在某范圍內放到同一分組內,返回每個范圍中相應的item個數。

  • 參數

    參數

    說明

    name

    自定義的統計聚合名稱,用于區分不同的統計聚合,可根據此名稱獲取本次統計聚合結果。

    field_name

    用于統計聚合的字段,僅支持Long和Double類型。

    ranges[from, to)

    分組的范圍。

    起始值from可以使用最小值Double.MIN_VALUE,結束值to可以使用最大值Double.MAX_VALUE。

    sub_aggs和sub_group_bys

    子統計聚合,子統計聚合會根據分組內容再進行一次統計聚合分析。

    例如按銷量分組后再按省份分組,即可獲得某個銷量范圍內哪個省比重比較大,實現方法是GroupByRange下添加一個GroupByField。

  • 示例

    $request = array(
        'table_name' => 'myTableName',
        'index_name' => 'myIndexName',
        'search_query' => array(
            'offset' => 0,
            'limit' => 0,
            'get_total_count' => true,
            'query' => array(
                'query_type' => QueryTypeConst::MATCH_ALL_QUERY
            ),
            'group_bys' => array(
                'group_bys' => array(
                    array(
                        'name' => 'group_by_GROUP_BY_RANGE',
                        'type' => GroupByTypeConst::GROUP_BY_RANGE,
                        'body' => array(
                            'field_name' => 'long',
                            'ranges' => array(
                                array(
                                    'from' => 1,
                                    'to' => 3
                                ),
                                array(
                                    'from' => 3,
                                    'to' => 6
                                ),
                                array(
                                    'from' => 6,
                                    'to' => 10
                                )
                            )
                        )
                    ),
                ),
            )
        ),
        'columns_to_get' => array(
            'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX,
        ),
    );
    
    $response = $this->otsClient->search($request);
    $group_by_results = $response["group_bys"]["group_by_results"];
    
    print json_encode($group_by_results, JSON_PRETTY_PRINT);

地理位置分組

根據距離某一個中心點的范圍對查詢結果進行分組,距離差值在某范圍內放到同一分組內,返回每個范圍中相應的item個數。

  • 參數

    參數

    說明

    name

    自定義的統計聚合名稱,用于區分不同的統計聚合,可根據此名稱獲取本次統計聚合結果。

    field_name

    用于統計聚合的字段,僅支持Geo_point類型。

    origin(lat, lon)

    起始中心點的經緯度。

    lat是起始中心點緯度,lon是起始中心點經度。

    ranges[from, to)

    分組的范圍,單位為米,from和to的值均為Double類型。

    起始值from可以使用最小值Double.MIN_VALUE,結束值to可以使用最大值Double.MAX_VALUE。

    sub_aggs和sub_group_bys

    子統計聚合,子統計聚合會根據分組內容再進行一次統計聚合分析。

  • 示例

    $request = array(
        'table_name' => 'myTableName',
        'index_name' => 'myIndexName',
        'search_query' => array(
            'offset' => 0,
            'limit' => 0,
            'get_total_count' => true,
            'query' => array(
                'query_type' => QueryTypeConst::MATCH_ALL_QUERY
            ),
            'group_bys' => array(
                'group_bys' => array(
                    array(
                        'name' => 'group_by_GROUP_BY_GEO_DISTANCE',
                        'type' => GroupByTypeConst::GROUP_BY_GEO_DISTANCE,
                        'body' => array(
                            'field_name' => 'geo',
                            'origin' => array(
                                'lat' => 5,
                                'lon' => 6
                            ),
                            'ranges' => array(
                                array(
                                    'from' => 0.,
                                    'to' => 1000.
                                ),
                                array(
                                    'from' => 10000.,
                                    'to' => 100000.
                                ),
                                array(
                                    'from' => 100000.,
                                ),
                            )
                        )
                    ),
                ),
            )
        ),
        'columns_to_get' => array(
            'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX,
        ),
    );
    
    $response = $this->otsClient->search($request);
    $group_by_results = $response["group_bys"]["group_by_results"];
    
    print json_encode($group_by_results, JSON_PRETTY_PRINT);

過濾條件分組

按照過濾條件對查詢結果進行分組,獲取每個過濾條件匹配到的數量,返回結果的順序和添加過濾條件的順序一致。

  • 參數

    參數

    說明

    name

    自定義的統計聚合名稱,用于區分不同的統計聚合,可根據此名稱獲取本次統計聚合結果。

    filters

    過濾條件,返回結果的順序和添加過濾條件的順序一致。

    sub_aggs和sub_group_bys

    子統計聚合,子統計聚合會根據分組內容再進行一次統計聚合分析。

  • 示例

    $request = array(
        'table_name' => 'myTableName',
        'index_name' => 'myIndexName',
        'search_query' => array(
            'offset' => 0,
            'limit' => 0,
            'get_total_count' => true,
            'query' => array(
                'query_type' => QueryTypeConst::MATCH_ALL_QUERY
            ),
            'group_bys' => array(
                'group_bys' => array(
                    array(
                        'name' => 'group_by_GROUP_BY_FILTER',
                        'type' => GroupByTypeConst::GROUP_BY_FILTER,
                        'body' => array(
                            'filters' => array(
                                array(
                                    'query_type' => QueryTypeConst::TERM_QUERY,
                                    'query' => array(
                                        'field_name' => 'boolean',
                                        'term' => false
                                    )
                                ),
                                array(
                                    'query_type' => QueryTypeConst::TERM_QUERY,
                                    'query' => array(
                                        'field_name' => 'boolean',
                                        'term' => true
                                    )
                                )
                            )
                        )
                    ),
                ),
            )
        ),
        'columns_to_get' => array(
            'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX,
        ),
    );
    
    $response = $this->otsClient->search($request);
    $group_by_results = $response["group_bys"]["group_by_results"];
    
    print json_encode($group_by_results, JSON_PRETTY_PRINT);

直方圖統計

按照指定數據間隔對查詢結果進行分組,字段值在相同范圍內放到同一分組內,返回每個分組的值和該值對應的個數。

  • 參數

    參數

    說明

    name

    自定義的統計聚合名稱,用于區分不同的統計聚合,可根據此名稱獲取本次統計聚合結果。

    field_name

    用于統計聚合的字段,僅支持Long和Double類型。

    interval

    統計間隔。

    field_range[min,max]

    統計范圍,與interval參數配合使用限制分組的數量。(field_range.max-field_range.min)/interval的值不能超過2000。

    min_doc_count

    最小行數。當分組中的行數小于最小行數時,不會返回此分組的統計結果。

    missing

    當某行數據中的字段為空時,字段值的默認值。

    • 如果未設置missing值,則在統計聚合時會忽略該行。

    • 如果設置了missing值,則使用missing值作為字段值的默認值參與統計聚合。

  • 示例

    $request = array(
        'table_name' => 'myTableName',
        'index_name' => 'myIndexName',
        'search_query' => array(
            'offset' => 0,
            'limit' => 0,
            'get_total_count' => true,
            'query' => array(
                'query_type' => QueryTypeConst::MATCH_ALL_QUERY
            ),
            'group_bys' => array(
                'group_bys' => array(
                    array(
                        'name' => 'group_by_GROUP_BY_HISTOGRAM',
                        'type' => GroupByTypeConst::GROUP_BY_HISTOGRAM,
                        'body' => array(
                            'field_name' => 'long',
                            'interval' => 3,
                            'missing' => 0,
                            'min_doc_count' => 0,
                            'field_range' => array(
                                'min' => 2,
                                'max' => 10,
                            ),
                            'sort' => array(
                                'sorters' => array(
                                    array(
                                        'row_count_sort' => array(
                                            'order' => SortOrderConst::SORT_ORDER_ASC
                                        )
                                    )
                                )
                            )
                        )
                    ),
                ),
            )
        ),
        'columns_to_get' => array(
            'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX,
        ),
    );
    
    $response = $this->otsClient->search($request);
    $group_by_results = $response["group_bys"]["group_by_results"];
    
    print json_encode($group_by_results, JSON_PRETTY_PRINT);

嵌套

分組類型的統計聚合功能支持嵌套,其內部可以添加子統計聚合。

主要用于在分組內再次進行統計聚合,以兩層的嵌套為例:

  • GroupBy+SubGroupBy:按省份分組后再按照城市分組,獲取每個省份下每個城市的數據。

  • GroupBy+SubAggregation:按照省份分組后再求某個指標的最大值,獲取每個省的某個指標最大值。

說明

為了性能、復雜度等綜合考慮,嵌套的層級只開放了一定的層數。更多信息,請參見多元索引限制

$request = array(
    'table_name' => 'myTableName',
    'index_name' => 'myIndexName',
    'search_query' => array(
        'offset' => 0,
        'limit' => 0,
        'get_total_count' => true,
        'query' => array(
            'query_type' => QueryTypeConst::MATCH_ALL_QUERY
        ),
        'group_bys' => array(
            'group_bys' => array(
                array(
                    'name' => 'group_by_GROUP_BY_FIELD',
                    'type' => GroupByTypeConst::GROUP_BY_FIELD,
                    'body' => array(
                        'field_name' => 'boolean',
                        'size' => 3,
                        'min_doc_count' => 0,
                        'sort' => array(
                            'sorters' => array(
                                array(
                                    'group_key_sort' => array(
                                        'order' => SortOrderConst::SORT_ORDER_DESC
                                    ),
                                ),
                            )
                        ),
                        'sub_aggs' => array(
                            'aggs' => array(
                                array(
                                    'name' => 'groupSum',
                                    'type' => AggregationTypeConst::AGG_SUM,
                                    'body' => array(
                                        'field_name' => 'long',
                                        'missing' => 0
                                    )
                                ),
                            ),
                        ),
                    )
                ),
            ),
        )
    ),
    'columns_to_get' => array(
        'return_type' => ColumnReturnTypeConst::RETURN_ALL_FROM_INDEX,
    ),
);

$response = $this->otsClient->search($request);
$group_by_results = $response["group_bys"]["group_by_results"];

print json_encode($group_by_results, JSON_PRETTY_PRINT);