Execute operações de agregação para obter valores mínimos, máximos, soma, média, contagem e contagem distinta de linhas. Agrupe resultados por valor de campo, intervalo, localização geográfica ou filtro e realize consultas aninhadas. Combine múltiplas operações de agregação para consultas complexas.
Procedimento
A figura a seguir ilustra o procedimento completo de agregação.

O servidor consulta os dados que atendem às condições especificadas e executa a agregação conforme a solicitação. Por isso, solicitações com agregação têm processamento mais complexo do que aquelas sem essa necessidade.
Informações básicas
A tabela a seguir descreve os métodos de agregação disponíveis.
|
Método |
Descrição |
|
Valor mínimo |
Retorna o menor valor de um campo. Funciona de maneira semelhante à função MIN do SQL. |
|
Valor máximo |
Retorna o maior valor de um campo. Equivale à função MAX do SQL. |
|
Soma |
Calcula a soma de todos os valores de um campo numérico. Comportamento similar à função SUM do SQL. |
|
Valor médio |
Obtém a média de todos os valores de um campo numérico. Corresponde à função AVG do SQL. |
|
Contagem |
Retorna o número total de valores de um campo específico ou o total de linhas em um índice de busca. Análogo à função COUNT do SQL. |
|
Contagem distinta |
Indica a quantidade de valores únicos em um campo. Similar à função COUNT(DISTINCT) do SQL. |
|
Estatísticas de percentil |
Um valor de percentil indica a posição relativa de um dado dentro de um conjunto. Por exemplo, ao coletar estatísticas sobre o tempo de resposta de cada requisição durante a operação e manutenção rotineira do sistema, analise a distribuição desses tempos usando percentis como p25, p50, p90 e p99. |
|
TopRows |
Obtém estatísticas das principais linhas ordenadas por campos específicos em cada grupo. |
|
Agrupamento por valor de campo |
Agrupa os resultados da consulta com base nos valores dos campos. Valores idênticos ficam no mesmo grupo. O sistema retorna o valor de cada grupo e a respectiva contagem. Nota
Se um grupo tiver uma quantidade muito grande de valores, o número calculado pode divergir do valor real. |
|
Agrupamento por intervalo |
Organiza os resultados da consulta conforme faixas de valores de um campo. Valores dentro de um intervalo específico são agrupados, e o sistema retorna a contagem de itens em cada faixa. |
|
Agrupamento por localização geográfica |
Classifica os resultados da consulta segundo a distância entre locais geográficos e um ponto central. Itens cuja distância se enquadra em determinada faixa formam um grupo, e o sistema informa quantos valores existem em cada intervalo. |
|
Agrupamento por filtro |
Filtra os resultados da consulta e os agrupa para calcular quantos itens correspondem a cada condição. A ordem de retorno segue a sequência em que os filtros foram definidos. |
|
Consulta por histograma |
Divide os resultados da consulta em intervalos de dados predefinidos. Valores que caem na mesma faixa pertencem ao mesmo grupo. O sistema devolve o intervalo de valores e a contagem de cada grupo. |
|
Aninhamento |
Pré-requisitos
Instância OTSClient inicializada. Para mais detalhes, consulte Inicializar uma instância OTSClient.
Tabela de dados criada e preenchida. Consulte Criar uma tabela de dados e Gravar dados.
Índice de busca criado para a tabela de dados. Veja Criar um índice de busca.
Valor mínimo
Retorna o menor valor 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. Use esse nome para consultar os resultados de uma agregação específica.
field_name
Campo usado na operação de agregação. Apenas os tipos LONG, DOUBLE e DATE são aceitos.
missing
Valor padrão assumido pelo campo quando ele está vazio na linha processada pela agregação.
-
Sem a definição de missing, a linha é ignorada.
-
Ao definir missing, o sistema usa esse valor como substituto para o 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 maior valor de um campo. Equivale à função MAX do SQL.
-
Parâmetros
Parâmetro
Descrição
name
Nome exclusivo da operação de agregação. Use esse nome para consultar os resultados de uma agregação específica.
field_name
Campo usado na operação de agregação. Apenas os tipos LONG, DOUBLE e DATE são aceitos.
missing
Valor padrão assumido pelo campo quando ele está vazio na linha processada pela agregação.
-
Sem a definição de missing, a linha é ignorada.
-
Ao definir missing, o sistema usa esse valor como substituto para o 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
Calcula a soma de todos os valores de um campo numérico. Comportamento similar à função SUM do SQL.
-
Parâmetros
Parâmetro
Descrição
name
Nome exclusivo da operação de agregação. Use esse nome para consultar os resultados de uma agregação específica.
field_name
Campo usado na operação de agregação. Somente os tipos LONG e DOUBLE são suportados.
missing
Valor padrão assumido pelo campo quando ele está vazio na linha processada pela agregação.
-
Sem a definição de missing, a linha é ignorada.
-
Ao definir missing, o sistema usa esse valor como substituto para o 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
Obtém a média de todos os valores de um campo numérico. Corresponde à função AVG do SQL.
-
Parâmetros
Parâmetro
Descrição
name
Nome exclusivo da operação de agregação. Use esse nome para consultar os resultados de uma agregação específica.
field_name
Campo usado na operação de agregação. Apenas os tipos LONG, DOUBLE e DATE são aceitos.
missing
Valor padrão assumido pelo campo quando ele está vazio na linha processada pela agregação.
-
Sem a definição de missing, a linha é ignorada.
-
Ao definir missing, o sistema usa esse valor como substituto para o 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 específico ou o total de linhas em um índice de busca. Análogo à função COUNT do SQL.
Existem duas formas de obter o total de linhas em um índice de busca ou daquelas que satisfazem as condições da consulta:
Utilize o recurso de contagem da agregação e especifique count(*) na solicitação.
Use o recurso de consulta para contar as linhas correspondentes. Defina setGetTotalCount como true na consulta. Para obter o total geral de linhas do índice de busca, empregue MatchAllQuery.
Para saber quantas linhas contêm determinada coluna no índice de busca, utilize o nome dessa coluna como valor da expressão de contagem. Essa abordagem é ideal para cenários com colunas esparsas.
-
Parâmetros
Parâmetro
Descrição
name
Nome exclusivo da operação de agregação. Use esse nome para consultar os resultados de uma agregação específica.
field_name
Campo usado na operação de agregação. Os tipos aceitos são 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
Indica a quantidade de valores únicos em um campo. Similar à função COUNT(DISTINCT) do SQL.
O resultado da contagem distinta é uma aproximação.
Quando o total de linhas antes da aplicação da contagem distinta for inferior a 10.000, o cálculo fica próximo do valor exato.
Se o total de linhas atingir ou ultrapassar 100 milhões, a margem de erro gira em torno de 2%.
-
Parâmetros
Parâmetro
Descrição
name
Nome exclusivo da operação de agregação. Use esse nome para consultar os resultados de uma agregação específica.
field_name
Campo usado na operação de agregação. Os tipos aceitos são LONG, DOUBLE, BOOLEAN, KEYWORD, GEO_POINT e DATE.
missing
Valor padrão assumido pelo campo quando ele está vazio na linha processada pela agregação.
-
Sem a definição de missing, a linha é ignorada.
-
Ao definir missing, o sistema usa esse valor como substituto para o 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 dado dentro de um conjunto. Por exemplo, ao coletar estatísticas sobre o tempo de resposta de cada requisição durante a operação e manutenção rotineira do sistema, analise a distribuição desses tempos usando percentis como p25, p50, p90 e p99.
-
Parâmetros
Parâmetro
Descrição
name
Nome exclusivo da operação de agregação. Use esse nome para consultar os resultados de uma agregação específica.
field_name
Campo usado na operação de agregação. Apenas os tipos LONG, DOUBLE e DATE são aceitos.
percentiles
Percentis desejados, como p50, p90 e p99. É possível especificar um ou mais valores.
missing
Valor padrão assumido pelo campo quando ele está vazio na linha processada pela agregação.
-
Sem a definição de missing, a linha é ignorada.
-
Ao definir missing, o sistema usa esse valor como substituto para o 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 ordenadas por campos específicos em cada grupo.
Após agrupar os resultados da consulta com GroupBy, recupere as linhas de cada grupo. Esse método equivale a ANY_VALUE(field) no MySQL.
-
Parâmetros
Parâmetro
Descrição
name
Nome exclusivo da operação de agregação. Use esse nome para consultar os resultados de uma agregação específica.
limit
Quantidade de linhas principais a retornar por grupo.
sort
Regras de ordenação das linhas em cada grupo. O sistema retorna o número especificado de linhas principais seguindo esses critérios.
columns_to_get
Campos a serem retornados. Apenas campos presentes em índices de busca são aceitos. Campos ARRAY, DATE, GEOPOINT e NESTED não são suportados.
Esse parâmetro tem o mesmo significado de columns_to_get na solicitação principal. Basta defini-lo na requisição.
NotaAo buscar linhas resultantes de uma agregação por grupo, se o índice de busca contiver campos Nested, Geopoint ou Array, a resposta trará apenas as informações da chave primária. Para acessar o campo desejado, consulte diretamente 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);
Agrupamento por valor de campo
Agrupa os resultados da consulta com base nos valores dos campos. Valores idênticos ficam no mesmo grupo. O sistema retorna o valor de cada grupo e a respectiva contagem.
Se um grupo tiver uma quantidade muito grande de valores, o número calculado pode divergir do valor real.
-
Parâmetros
Parâmetro
Descrição
name
Nome exclusivo da operação de agregação. Use esse nome para consultar os resultados de uma agregação específica.
field_name
Campo usado na operação de agregação. Os tipos aceitos são LONG, DOUBLE, BOOLEAN, KEYWORD e DATE.
sort
Critérios de ordenação dos grupos. Por padrão, a classificação ocorre em ordem decrescente pelo número de itens. Se houver várias regras, elas são aplicadas na sequência definida. Opções disponíveis:
-
Ordenar por valor em ordem alfabética.
-
Ordenar por valor em ordem alfabética inversa.
-
Ordenar por contagem de linhas em ordem crescente.
-
Ordenar por contagem de linhas em ordem decrescente.
-
Ordenar pelos valores obtidos nas subagregações em ordem crescente.
-
Ordenar pelos valores obtidos nas subagregações em ordem decrescente.
size
Número de grupos a retornar. Valor padrão: 10. Limite máximo: 2000. Caso existam mais de 2.000 grupos, apenas os primeiros serão devolvidos.
sub_aggs e sub_group_bys
Operação de subagregação executada sobre os resultados do agrupamento.
-
Cenário
Consultar a quantidade de produtos por categoria, bem como os preços máximo e mínimo em cada uma.
-
Método
Agrupe os resultados por categoria de produto para obter a contagem por grupo. Em seguida, execute duas subagregações para extrair os preços máximo e mínimo de cada categoria.
-
Resultado de exemplo
-
Frutas: 5. Preço máximo de USD 2. Preço mínimo de USD 0,5.
-
Artigos de higiene: 10. Preço máximo de USD 13. Preço mínimo de USD 0,1.
-
Dispositivos eletrônicos: 3. Preço máximo de USD 1.160. Preço mínimo de USD 310.
-
Outros produtos: 15. Preço máximo de USD 130. Preço mínimo de 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);
Agrupamento por intervalo
Organiza os resultados da consulta conforme faixas de valores de um campo. Valores dentro de um intervalo específico são agrupados, e o sistema retorna a contagem de itens em cada faixa.
-
Parâmetros
Parâmetro
Descrição
name
Nome exclusivo da operação de agregação. Use esse nome para consultar os resultados de uma agregação específica.
field_name
Campo usado na operação de agregação. Somente os tipos LONG e DOUBLE são suportados.
ranges[from, to)
Faixas de valores utilizadas no agrupamento.
O intervalo pode variar de Double.MIN_VALUE até Double.MAX_VALUE.
sub_aggs e sub_group_bys
Operação de subagregação executada sobre os resultados do agrupamento.
Por exemplo, após agrupar resultados por volume de vendas e por estado, identifique qual estado concentra a maior fatia das vendas em determinada faixa. Para isso, defina um valor para GroupByField dentro de GroupByRange.
-
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);
Agrupamento por localização geográfica
Classifica os resultados da consulta segundo a distância entre locais geográficos e um ponto central. Itens cuja distância se enquadra em determinada faixa formam um grupo, e o sistema informa quantos valores existem em cada intervalo.
-
Parâmetros
Parâmetro
Descrição
name
Nome exclusivo da operação de agregação. Use esse nome para consultar os resultados de uma agregação específica.
field_name
Campo utilizado na operação de agregação. Apenas o tipo GEOPOINT é aceito.
origin(lat, lon)
Coordenadas do ponto central.
lat representa a latitude e lon representa a longitude desse ponto.
ranges[from, to)
Faixas de distância usadas no agrupamento, medidas em metros. Os valores de from e to devem ser do tipo DOUBLE.
O intervalo pode variar de Double.MIN_VALUE até Double.MAX_VALUE.
sub_aggs e sub_group_bys
Operação de subagregação executada sobre os 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);
Agrupamento por filtro
Filtra os resultados da consulta e os agrupa para calcular quantos itens correspondem a cada condição. A ordem de retorno segue a sequência em que os filtros foram definidos.
-
Parâmetros
Parâmetro
Descrição
name
Nome exclusivo da operação de agregação. Use esse nome para consultar os resultados de uma agregação específica.
filters
Filtros aplicados à consulta. Os resultados respeitam a ordem de definição dos filtros.
sub_aggs e sub_group_bys
Operação de subagregação executada sobre os 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);
Consulta por histograma
Divide os resultados da consulta em intervalos de dados predefinidos. Valores que caem na mesma faixa pertencem ao mesmo grupo. O sistema devolve o intervalo de valores e a contagem de cada grupo.
-
Parâmetros
Parâmetro
Descrição
name
Nome exclusivo da operação de agregação. Use esse nome para consultar os resultados de uma agregação específica.
field_name
Campo usado na operação de agregação. Somente os tipos LONG e DOUBLE são suportados.
interval
Intervalo de dados utilizado para gerar os resultados da agregação.
field_range[min,max]
Faixa usada em conjunto com o parâmetro interval para limitar a quantidade de grupos.
O resultado da fórmula não pode ultrapassar 2.000.min_doc_count
Contagem mínima de linhas. Grupos com menos linhas do que esse limite não terão seus resultados de agregação retornados.
missing
Valor padrão assumido pelo campo quando ele está vazio na linha processada pela agregação.
-
Sem a definição de missing, a linha é ignorada.
-
Ao definir missing, o sistema usa esse valor como substituto para o 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
O aninhamento permite executar subagregações dentro de um grupo. É possível criar estruturas de agregação aninhada com até dois níveis.
GroupBy + SubGroupBy: Agrupamento por estado e depois por cidade, obtendo dados detalhados de cada município dentro de seu respectivo estado.
GroupBy + SubAggregation: Agrupamento por estado combinado com o cálculo do valor máximo de uma métrica, revelando o pico dessa métrica em cada estado.
Para equilibrar desempenho e complexidade, o sistema limita o número de camadas de aninhamento. Consulte Limites do índice de busca para mais detalhes.
$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);