Todos os produtos
Search
Central de documentação

Tablestore:Agregação

Última atualização: Sep 29, 2026

Use operações de agregação para obter os valores mínimo, máximo, a soma, a média, a contagem e a contagem distinta de linhas. Agrupe os resultados por valor de campo, intervalo, localização geográfica ou filtro, e execute consultas aninhadas. Em consultas complexas, combine várias operações de agregação.

Procedimento

A figura a seguir mostra o procedimento completo de agregação.

fig_agg_pro

O servidor consulta os dados que atendem às condições e executa a agregação com base na solicitação. Por isso, solicitações com agregação são mais complexas de processar do que aquelas sem agregação.

Informações de contexto

A tabela a seguir descreve os métodos de agregação.

Método

Descrição

Valor mínimo

Retorna o valor mínimo de um campo. Funciona de maneira semelhante à função MIN do SQL.

Valor máximo

Retorna o valor máximo de um campo. Funciona de maneira semelhante à função MAX do SQL.

Soma

Retorna a soma de todos os valores de um campo numérico. Funciona de maneira semelhante à função SUM do SQL.

Valor médio

Retorna a média de todos os valores de um campo numérico. Funciona de maneira semelhante à função AVG do SQL.

Contagem

Retorna o número total de valores de um campo especificado ou o número total de linhas em um índice de pesquisa. Funciona de maneira semelhante à função COUNT do SQL.

Contagem distinta

Retorna o número de valores distintos de um campo. Funciona de maneira semelhante à função COUNT(DISTINCT) do SQL.

Estatísticas de percentil

Um valor de percentil indica a posição relativa de um valor em um conjunto de dados. Por exemplo, ao coletar estatísticas sobre o tempo de resposta de cada solicitação durante a operação e manutenção (O&M) de rotina do seu sistema, analise a distribuição do tempo de resposta usando percentis como p25, p50, p90 e p99.

TopRows

Obtém estatísticas das principais linhas classificadas com base em campos específicos para cada grupo.

Agrupar por valor de campo

Agrupa os resultados da consulta com base nos valores dos campos. Valores iguais são agrupados. Retorna o valor idêntico de cada grupo e a quantidade de valores idênticos em cada grupo.

Nota

O número calculado pode divergir do número real se a quantidade de valores em um grupo for muito grande.

Agrupar por intervalo

Agrupa os resultados da consulta com base nos intervalos de valores de um campo. Valores de campo dentro de um intervalo específico são agrupados. Retorna o número de valores em cada intervalo.

Agrupar por localização geográfica

Agrupa os resultados da consulta com base nas distâncias das localizações geográficas até um ponto central. Resultados de consulta com distâncias dentro de um intervalo específico são agrupados. Retorna o número de valores em cada intervalo.

Agrupar por filtro

Filtra os resultados da consulta e os agrupa para obter o número de resultados correspondentes a cada filtro. Os resultados são retornados na ordem em que os filtros são especificados.

Consultar por histograma

Agrupa os resultados da consulta com base em intervalos de dados específicos. Valores de campo dentro do mesmo intervalo são agrupados. Retorna o intervalo de valores de cada grupo e o número de valores em cada grupo.

Aninhamento

Pré-requisitos

Valor mínimo

Retorna o valor mínimo de um campo. Funciona de maneira semelhante à função MIN do SQL.

  • Parâmetros

    Parâmetro

    Descrição

    name

    Nome exclusivo da operação de agregação. Permite consultar os resultados de uma operação específica com base neste nome.

    field_name

    Nome do campo usado para a operação de agregação. Suporta apenas os tipos LONG, DOUBLE e DATE.

    missing

    Valor padrão assumido pelo campo na operação de agregação quando o valor original da linha está vazio.

    • Se não especificar um valor para missing, a linha será ignorada.

    • Se especificar um valor para missing, ele será usado como o valor do campo da linha.

  • Exemplo

    $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);

Valor máximo

Retorna o valor máximo de um campo. Funciona de maneira semelhante à função MAX do SQL.

  • Parâmetros

    Parâmetro

    Descrição

    name

    Nome exclusivo da operação de agregação. Permite consultar os resultados de uma operação específica com base neste nome.

    field_name

    Nome do campo usado para a operação de agregação. Suporta apenas os tipos LONG, DOUBLE e DATE.

    missing

    Valor padrão assumido pelo campo na operação de agregação quando o valor original da linha está vazio.

    • Se não especificar um valor para missing, a linha será ignorada.

    • Se especificar um valor para missing, ele será usado como o valor do campo da linha.

  • Exemplo

    $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);

Soma

Retorna a soma de todos os valores de um campo numérico. Funciona de maneira semelhante à função SUM do SQL.

  • Parâmetros

    Parâmetro

    Descrição

    name

    Nome exclusivo da operação de agregação. Permite consultar os resultados de uma operação específica com base neste nome.

    field_name

    Nome do campo usado para a operação de agregação. Suporta apenas os tipos LONG e DOUBLE.

    missing

    Valor padrão assumido pelo campo na operação de agregação quando o valor original da linha está vazio.

    • Se não especificar um valor para missing, a linha será ignorada.

    • Se especificar um valor para missing, ele será usado como o valor do campo da linha.

  • Exemplo

    $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);

Valor médio

Retorna a média de todos os valores de um campo numérico. Funciona de maneira semelhante à função AVG do SQL.

  • Parâmetros

    Parâmetro

    Descrição

    name

    Nome exclusivo da operação de agregação. Permite consultar os resultados de uma operação específica com base neste nome.

    field_name

    Nome do campo usado para a operação de agregação. Suporta apenas os tipos LONG, DOUBLE e DATE.

    missing

    Valor padrão assumido pelo campo na operação de agregação quando o valor original da linha está vazio.

    • Se não especificar um valor para missing, a linha será ignorada.

    • Se especificar um valor para missing, ele será usado como o valor do campo da linha.

  • Exemplo

    $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);

Contagem

Retorna o número total de valores de um campo especificado ou o número total de linhas em um índice de pesquisa. Funciona de maneira semelhante à função COUNT do SQL.

Nota

Use os seguintes métodos para consultar o total de linhas em um índice de pesquisa ou o total de linhas que atendem às condições da consulta:

  • Use o recurso de contagem da agregação e especifique count(*) na solicitação.

  • Use o recurso de consulta para obter o número de linhas que atendem às condições. Defina setGetTotalCount como true na consulta. Use MatchAllQuery para obter o total de linhas em um índice de pesquisa.

Use o nome de uma coluna como valor da expressão de contagem para consultar quantas linhas contêm essa coluna no índice de pesquisa. Este método é ideal para cenários com colunas esparsas.

  • Parâmetros

    Parâmetro

    Descrição

    name

    Nome exclusivo da operação de agregação. Permite consultar os resultados de uma operação específica com base neste nome.

    field_name

    Nome do campo usado para a operação de agregação. Suporta apenas os tipos LONG, DOUBLE, BOOLEAN, KEYWORD, GEO_POINT e DATE.

  • Exemplo

    $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);

Contagem distinta

Retorna o número de valores distintos de um campo. Funciona de maneira semelhante à função COUNT(DISTINCT) do SQL.

Nota

O número de valores distintos é aproximado.

  • Se o total de linhas antes do uso da contagem distinta for menor que 10.000, o resultado será próximo ao valor exato.

  • Se o total de linhas for maior ou igual a 100 milhões, a taxa de erro será de aproximadamente 2%.

  • Parâmetros

    Parâmetro

    Descrição

    name

    Nome exclusivo da operação de agregação. Permite consultar os resultados de uma operação específica com base neste nome.

    field_name

    Nome do campo usado para a operação de agregação. Suporta apenas os tipos LONG, DOUBLE, BOOLEAN, KEYWORD, GEO_POINT e DATE.

    missing

    Valor padrão assumido pelo campo na operação de agregação quando o valor original da linha está vazio.

    • Se não especificar um valor para missing, a linha será ignorada.

    • Se especificar um valor para missing, ele será usado como o valor do campo da linha.

  • Exemplo

    $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);

Estatísticas de percentil

Um valor de percentil indica a posição relativa de um valor em um conjunto de dados. Por exemplo, ao coletar estatísticas sobre o tempo de resposta de cada solicitação durante a operação e manutenção (O&M) de rotina do seu sistema, analise a distribuição do tempo de resposta usando percentis como p25, p50, p90 e p99.

Nota

Para melhorar a precisão, recomendamos especificar percentis extremos, como p1 e p99. O uso de percentis extremos em vez de valores intermediários, como p50, retorna resultados mais precisos.

  • Parâmetros

    Parâmetro

    Descrição

    name

    Nome exclusivo da operação de agregação. Permite consultar os resultados de uma operação específica com base neste nome.

    field_name

    Nome do campo usado para a operação de agregação. Suporta apenas os tipos LONG, DOUBLE e DATE.

    percentiles

    Os percentis, como p50, p90 e p99. Especifique um ou mais percentis.

    missing

    Valor padrão assumido pelo campo na operação de agregação quando o valor original da linha está vazio.

    • Se não especificar um valor para missing, a linha será ignorada.

    • Se especificar um valor para missing, ele será usado como o valor do campo da linha.

  • Exemplo

    $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

Obtém estatísticas das principais linhas classificadas com base em campos específicos para cada grupo.

Após agrupar os resultados da consulta com GroupBy, você pode consultar as linhas de cada grupo. Este método funciona de forma semelhante a ANY_VALUE(field) no MySQL.

  • Parâmetros

    Parâmetro

    Descrição

    name

    Nome exclusivo da operação de agregação. Permite consultar os resultados de uma operação específica com base neste nome.

    limit

    Número de linhas principais a serem retornadas para cada grupo.

    sort

    Regras de classificação para as linhas em cada grupo. Retorna o número especificado de linhas principais ordenadas conforme essas regras.

    columns_to_get

    Campos a serem retornados. Suporta apenas campos em índices de pesquisa. Campos ARRAY, DATE, GEOPOINT e NESTED não são suportados.

    O valor deste parâmetro é idêntico ao de columns_to_get na solicitação. Especifique columns_to_get apenas na solicitação.

    Nota

    Ao consultar as linhas obtidas dos resultados de uma agregação em cada grupo, os resultados retornados conterão apenas as informações da chave primária se o índice de pesquisa contiver campos Nested, Geopoint ou Array. Para obter o campo necessário, consulte a tabela de dados.

  • Exemplo

    $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);

Agrupar por valor de campo

Agrupa os resultados da consulta com base nos valores dos campos. Valores iguais são agrupados. Retorna o valor idêntico de cada grupo e a quantidade de valores idênticos em cada grupo.

Nota

O número calculado pode divergir do número real se a quantidade de valores em um grupo for muito grande.

  • Parâmetros

    Parâmetro

    Descrição

    name

    Nome exclusivo da operação de agregação. Permite consultar os resultados de uma operação específica com base neste nome.

    field_name

    Nome do campo usado para a operação de agregação. Suporta apenas os tipos LONG, DOUBLE, BOOLEAN, KEYWORD e DATE.

    sort

    Regras de classificação para os grupos. Por padrão, os grupos são ordenados pelo número de itens em ordem decrescente. Se houver várias regras, a classificação segue a ordem de configuração. Parâmetros suportados:

    • Classificar por valor em ordem alfabética.

    • Classificar por valor em ordem alfabética inversa.

    • Classificar por contagem de linhas em ordem crescente.

    • Classificar por contagem de linhas em ordem decrescente.

    • Classificar pelos valores obtidos dos resultados da subagregação em ordem crescente.

    • Classificar pelos valores obtidos dos resultados da subagregação em ordem decrescente.

    size

    Número de grupos a serem retornados. Valor padrão: 10. Valor máximo: 2000. Se o total de grupos exceder 2.000, apenas os primeiros 2.000 serão retornados.

    sub_aggs e sub_group_bys

    Operação de subagregação. Permite executar subagregações com base nos resultados do agrupamento.

    • Cenário

      Consultar o número de product em cada categoria, bem como os preços máximo e mínimo de product em cada categoria.

    • Método

      Agrupar os resultados da consulta por categoria de product para obter a quantidade de product em cada categoria. Em seguida, executar duas operações de subagregação para obter os preços máximo e mínimo de product em cada categoria.

    • Exemplo de resultado

      • Frutas: 5. Preço máximo: USD 2. Preço mínimo: USD 0,5.

      • Artigos de higiene: 10. Preço máximo: USD 13. Preço mínimo: USD 0,1.

      • Dispositivos eletrônicos: 3. Preço máximo: USD 1.160. Preço mínimo: USD 310.

      • Outros product: 15. Preço máximo: USD 130. Preço mínimo: USD 11.

  • Exemplo

    $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);

Agrupar por intervalo

Agrupa os resultados da consulta com base nos intervalos de valores de um campo. Valores de campo dentro de um intervalo específico são agrupados. Retorna o número de valores em cada intervalo.

  • Parâmetros

    Parâmetro

    Descrição

    name

    Nome exclusivo da operação de agregação. Permite consultar os resultados de uma operação específica com base neste nome.

    field_name

    Nome do campo usado para a operação de agregação. Suporta apenas os tipos LONG e DOUBLE.

    ranges[from, to)

    Intervalos de valores usados para o agrupamento.

    O intervalo pode começar em Double.MIN_VALUE e terminar em Double.MAX_VALUE.

    sub_aggs e sub_group_bys

    Operação de subagregação. Permite executar subagregações com base nos resultados do agrupamento.

    Por exemplo, após agrupar os resultados da consulta por volume de vendas e por província, obtenha a província com a maior proporção de volume de vendas em um intervalo especificado. Especifique um valor para GroupByField em GroupByRange para executar esta consulta.

  • Exemplo

    $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);

Agrupar por localização geográfica

Agrupa os resultados da consulta com base nas distâncias das localizações geográficas até um ponto central. Resultados de consulta com distâncias dentro de um intervalo específico são agrupados. Retorna o número de valores em cada intervalo.

  • Parâmetros

    Parâmetro

    Descrição

    name

    Nome exclusivo da operação de agregação. Permite consultar os resultados de uma operação específica com base neste nome.

    field_name

    Nome do campo usado para a operação de agregação. Suporta apenas o tipo GEOPOINT.

    origin(lat, lon)

    Longitude e latitude do ponto central.

    lat especifica a latitude e lon especifica a longitude do ponto central.

    ranges[from, to)

    Intervalos de distância usados para o agrupamento. Unidade: metros. Os valores de from e to são do tipo DOUBLE.

    O intervalo pode começar em Double.MIN_VALUE e terminar em Double.MAX_VALUE.

    sub_aggs e sub_group_bys

    Operação de subagregação. Permite executar subagregações com base nos resultados do agrupamento.

  • Exemplo

    $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);

Agrupar por filtro

Filtra os resultados da consulta e os agrupa para obter o número de resultados correspondentes a cada filtro. Os resultados são retornados na ordem em que os filtros são especificados.

  • Parâmetros

    Parâmetro

    Descrição

    name

    Nome exclusivo da operação de agregação. Permite consultar os resultados de uma operação específica com base neste nome.

    filters

    Filtros que podem ser usados para a consulta. Os resultados são retornados na ordem em que os filtros são especificados.

    sub_aggs e sub_group_bys

    Operação de subagregação. Permite executar subagregações com base nos resultados do agrupamento.

  • Exemplo

    $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);

Consultar por histograma

Agrupa os resultados da consulta com base em intervalos de dados específicos. Valores de campo dentro do mesmo intervalo são agrupados. Retorna o intervalo de valores de cada grupo e o número de valores em cada grupo.

  • Parâmetros

    Parâmetro

    Descrição

    name

    Nome exclusivo da operação de agregação. Permite consultar os resultados de uma operação específica com base neste nome.

    field_name

    Nome do campo usado para a operação de agregação. Suporta apenas os tipos LONG e DOUBLE.

    interval

    Intervalo de dados usado para obter os resultados da agregação.

    field_range[min,max]

    Intervalo usado em conjunto com o parâmetro interval para limitar o número de grupos. O valor calculado pela fórmula não pode exceder 2.000.

    min_doc_count

    Número mínimo de linhas. Se a quantidade de linhas em um grupo for menor que este valor, os resultados da agregação para o grupo não serão retornados.

    missing

    Valor padrão assumido pelo campo na operação de agregação quando o valor original da linha está vazio.

    • Se não especificar um valor para missing, a linha será ignorada.

    • Se especificar um valor para missing, ele será usado como o valor do campo da linha.

  • Exemplo

    $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);

Aninhamento

Use o aninhamento para executar operações de subagregação em um grupo. Por exemplo, é possível executar operações de agregação aninhadas em até dois níveis.

  • GroupBy + SubGroupBy: Agrupa os itens por província e por cidade para obter dados de cada cidade em cada província.

  • GroupBy + SubAggregation: Agrupa os itens por província e calcula o valor máximo de uma métrica para obter o valor máximo dessa métrica para cada província.

Nota

Para equilibrar desempenho e complexidade, apenas um número específico de camadas de aninhamento é permitido. Para mais informações, consulte Search index limits.

$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);