Todos los productos
Search
Centro de documentos

Tablestore:Agregación

Última actualización: Sep 29, 2026

Las operaciones de agregación permiten obtener los valores mínimo, máximo, la suma y el promedio, así como el conteo total y el conteo de valores distintos de las filas. También es posible agrupar los resultados por valor de campo, rango, ubicación geográfica o filtro, además de ejecutar consultas anidadas. Para consultas complejas, se pueden combinar varias operaciones de agregación.

Procedimiento

A continuación se muestra el procedimiento completo de agregación.

fig_agg_pro

El servidor consulta los datos que cumplen con las condiciones de búsqueda y aplica la agregación correspondiente según la solicitud. Por lo tanto, procesar una solicitud con agregación es más complejo que procesar una sin ella.

Contexto

En la siguiente tabla se describen los métodos de agregación.

Método

Descripción

Valor mínimo

Devuelve el valor mínimo de un campo. Su funcionamiento es similar al de la función MIN de SQL.

Valor máximo

Devuelve el valor máximo de un campo. Su funcionamiento es similar al de la función MAX de SQL.

Suma

Devuelve la suma de todos los valores de un campo numérico. Su funcionamiento es similar al de la función SUM de SQL.

Valor promedio

Devuelve el promedio de todos los valores de un campo numérico. Su funcionamiento es similar al de la función AVG de SQL.

Conteo

Devuelve el número total de valores de un campo específico o el número total de filas en un índice de búsqueda. Su funcionamiento es similar al de la función COUNT de SQL.

Conteo de valores distintos

Devuelve la cantidad de valores distintos de un campo. Su funcionamiento es similar al de la función COUNT(DISTINCT) de SQL.

Estadísticas de percentiles

Un percentil indica la posición relativa de un valor dentro de un conjunto de datos. Por ejemplo, al recopilar estadísticas sobre el tiempo de respuesta de cada solicitud durante las tareas habituales de operación y mantenimiento del sistema, es necesario analizar la distribución de dichos tiempos mediante percentiles como p25, p50, p90 y p99.

TopRows

Obtiene estadísticas de las filas principales ordenadas por campos específicos dentro de cada grupo.

Agrupación por valor de campo

Agrupa los resultados de la consulta según los valores de un campo. Los valores idénticos se agrupan en conjunto. Devuelve el valor de cada grupo y la cantidad de veces que aparece.

Nota

Si un grupo contiene una cantidad muy grande de valores, el conteo calculado puede diferir del real.

Agrupación por rango

Agrupa los resultados de la consulta según los rangos de valores de un campo. Los valores que caen dentro de un mismo intervalo se agrupan en conjunto. Devuelve la cantidad de valores en cada rango.

Agrupación por ubicación geográfica

Agrupa los resultados de la consulta según la distancia entre las ubicaciones geográficas y un punto central. Los resultados cuyas distancias se encuentran dentro de un mismo intervalo se agrupan en conjunto. Devuelve la cantidad de valores en cada rango.

Agrupación por filtro

Filtra los resultados de la consulta y los agrupa para obtener la cantidad de coincidencias de cada filtro. Los resultados se devuelven en el mismo orden en el que se especificaron los filtros.

Consulta por histograma

Agrupa los resultados de la consulta según intervalos de datos específicos. Los valores de campo que pertenecen a un mismo intervalo se agrupan en conjunto. Devuelve el rango de valores de cada grupo y la cantidad de elementos que contiene.

Anidamiento

Requisitos previos

Valor mínimo

Devuelve el valor mínimo de un campo. Su funcionamiento es similar al de la función MIN de SQL.

  • Parámetros

    Parámetro

    Descripción

    name

    Nombre único de la operación de agregación. Con este nombre se consultan los resultados de una operación específica.

    field_name

    Nombre del campo sobre el cual se ejecuta la operación de agregación. Solo son compatibles los tipos LONG, DOUBLE y DATE.

    missing

    Valor predeterminado que se asigna al campo cuando su valor está vacío en una fila durante la agregación.

    • Si no se especifica un valor para missing, la fila se ignora.

    • Si se especifica un valor para missing, dicho valor se utiliza como valor del campo en esa fila.

  • Ejemplo

    $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

Devuelve el valor máximo de un campo. Su funcionamiento es similar al de la función MAX de SQL.

  • Parámetros

    Parámetro

    Descripción

    name

    Nombre único de la operación de agregación. Con este nombre se consultan los resultados de una operación específica.

    field_name

    Nombre del campo sobre el cual se ejecuta la operación de agregación. Solo son compatibles los tipos LONG, DOUBLE y DATE.

    missing

    Valor predeterminado que se asigna al campo cuando su valor está vacío en una fila durante la agregación.

    • Si no se especifica un valor para missing, la fila se ignora.

    • Si se especifica un valor para missing, dicho valor se utiliza como valor del campo en esa fila.

  • Ejemplo

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

Suma

Devuelve la suma de todos los valores de un campo numérico. Su funcionamiento es similar al de la función SUM de SQL.

  • Parámetros

    Parámetro

    Descripción

    name

    Nombre único de la operación de agregación. Con este nombre se consultan los resultados de una operación específica.

    field_name

    Nombre del campo sobre el cual se ejecuta la operación de agregación. Solo son compatibles los tipos LONG y DOUBLE.

    missing

    Valor predeterminado que se asigna al campo cuando su valor está vacío en una fila durante la agregación.

    • Si no se especifica un valor para missing, la fila se ignora.

    • Si se especifica un valor para missing, dicho valor se utiliza como valor del campo en esa fila.

  • Ejemplo

    $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 promedio

Devuelve el promedio de todos los valores de un campo numérico. Su funcionamiento es similar al de la función AVG de SQL.

  • Parámetros

    Parámetro

    Descripción

    name

    Nombre único de la operación de agregación. Con este nombre se consultan los resultados de una operación específica.

    field_name

    Nombre del campo sobre el cual se ejecuta la operación de agregación. Solo son compatibles los tipos LONG, DOUBLE y DATE.

    missing

    Valor predeterminado que se asigna al campo cuando su valor está vacío en una fila durante la agregación.

    • Si no se especifica un valor para missing, la fila se ignora.

    • Si se especifica un valor para missing, dicho valor se utiliza como valor del campo en esa fila.

  • Ejemplo

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

Conteo

Devuelve el número total de valores de un campo específico o el número total de filas en un índice de búsqueda. Su funcionamiento es similar al de la función COUNT de SQL.

Nota

Para consultar el número total de filas de un índice de búsqueda, o bien el total de filas que cumplen con las condiciones de consulta, utilice uno de los siguientes métodos:

  • Use la función de conteo de la agregación y especifique count(*) en la solicitud.

  • Use la función de consulta para obtener el número de filas que cumplen con las condiciones. Establezca setGetTotalCount en true dentro de la consulta. Para obtener el número total de filas del índice de búsqueda, utilice MatchAllQuery.

También es posible usar el nombre de una columna como valor de la expresión de conteo para saber cuántas filas del índice de búsqueda contienen dicha columna. Este método resulta útil en escenarios con columnas dispersas.

  • Parámetros

    Parámetro

    Descripción

    name

    Nombre único de la operación de agregación. Con este nombre se consultan los resultados de una operación específica.

    field_name

    Nombre del campo sobre el cual se ejecuta la operación de agregación. Solo son compatibles los tipos LONG, DOUBLE, BOOLEAN, KEYWORD, GEO_POINT y DATE.

  • Ejemplo

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

Conteo de valores distintos

Devuelve la cantidad de valores distintos de un campo. Su funcionamiento es similar al de la función COUNT(DISTINCT) de SQL.

Nota

La cantidad de valores distintos es un resultado aproximado.

  • Si el número total de filas antes de aplicar esta función es menor que 10,000, el resultado calculado se aproxima al valor exacto.

  • Si el número total de filas antes de aplicar esta función es igual o mayor que 100 millones, el margen de error es de aproximadamente 2%.

  • Parámetros

    Parámetro

    Descripción

    name

    Nombre único de la operación de agregación. Con este nombre se consultan los resultados de una operación específica.

    field_name

    Nombre del campo sobre el cual se ejecuta la operación de agregación. Solo son compatibles los tipos LONG, DOUBLE, BOOLEAN, KEYWORD, GEO_POINT y DATE.

    missing

    Valor predeterminado que se asigna al campo cuando su valor está vacío en una fila durante la agregación.

    • Si no se especifica un valor para missing, la fila se ignora.

    • Si se especifica un valor para missing, dicho valor se utiliza como valor del campo en esa fila.

  • Ejemplo

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

Estadísticas de percentiles

Un percentil indica la posición relativa de un valor dentro de un conjunto de datos. Por ejemplo, al recopilar estadísticas sobre el tiempo de respuesta de cada solicitud durante las tareas habituales de operación y mantenimiento del sistema, es necesario analizar la distribución de dichos tiempos mediante percentiles como p25, p50, p90 y p99.

Nota

Para mejorar la precisión de los resultados, se recomienda especificar percentiles extremos, como p1 y p99. Al utilizar estos valores extremos en lugar de otros como p50, los resultados devueltos son más precisos.

  • Parámetros

    Parámetro

    Descripción

    name

    Nombre único de la operación de agregación. Con este nombre se consultan los resultados de una operación específica.

    field_name

    Nombre del campo sobre el cual se ejecuta la operación de agregación. Solo son compatibles los tipos LONG, DOUBLE y DATE.

    percentiles

    Los percentiles deseados, como p50, p90 y p99. Es posible especificar uno o varios percentiles.

    missing

    Valor predeterminado que se asigna al campo cuando su valor está vacío en una fila durante la agregación.

    • Si no se especifica un valor para missing, la fila se ignora.

    • Si se especifica un valor para missing, dicho valor se utiliza como valor del campo en esa fila.

  • Ejemplo

    $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

Obtiene estadísticas de las filas principales ordenadas por campos específicos dentro de cada grupo.

Después de agrupar los resultados de la consulta con GroupBy, es posible consultar las filas de cada grupo. Este método funciona de manera similar a ANY_VALUE(field) en MySQL.

  • Parámetros

    Parámetro

    Descripción

    name

    Nombre único de la operación de agregación. Con este nombre se consultan los resultados de una operación específica.

    limit

    Cantidad de filas principales que se devolverán por cada grupo.

    sort

    Reglas de ordenación de las filas en cada grupo. Se devuelve la cantidad especificada de filas principales ordenadas según estas reglas para cada grupo.

    columns_to_get

    Campos que se devolverán. Solo son compatibles los campos presentes en los índices de búsqueda. No se admiten los campos de tipo ARRAY, DATE, GEOPOINT ni NESTED.

    El valor de este parámetro coincide con el de columns_to_get de la solicitud. Solo es necesario especificar columns_to_get en la solicitud.

    Nota

    Al consultar las filas obtenidas de los resultados de una operación de agregación en cada grupo, si el índice de búsqueda contiene campos de tipo Nested, Geopoint o Array, los resultados devueltos solo incluirán la información de la clave principal. Para obtener el campo requerido, debe consultar la tabla de datos.

  • Ejemplo

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

Agrupación por valor de campo

Método de agregación que agrupa los resultados de una consulta según los valores de un campo. Los valores idénticos se agrupan entre sí. Se devuelve el valor de cada grupo y la cantidad de veces que aparece.

Nota

Si un grupo contiene demasiados valores, la cantidad calculada puede diferir de la real.

  • Parámetros

    Parámetro

    Descripción

    name

    Nombre único de la operación de agregación. Con este nombre puede consultar los resultados de una operación específica.

    field_name

    Nombre del campo con el que se ejecuta la operación de agregación. Solo son compatibles los tipos LONG, DOUBLE, BOOLEAN, KEYWORD y DATE.

    sort

    Reglas de ordenamiento de los grupos. De forma predeterminada, los grupos se ordenan por la cantidad de elementos en orden descendente. Si configura varias reglas, los grupos se ordenan según el orden en el que definió dichas reglas. Parámetros compatibles:

    • Ordenar por valor en orden alfabético.

    • Ordenar por valor en orden alfabético inverso.

    • Ordenar por cantidad de filas en orden ascendente.

    • Ordenar por cantidad de filas en orden descendente.

    • Ordenar de forma ascendente por los valores obtenidos de los resultados de la subagregación.

    • Ordenar de forma descendente por los valores obtenidos de los resultados de la subagregación.

    size

    Cantidad de grupos que desea devolver. Valor predeterminado: 10. Valor máximo: 2000. Si la cantidad de grupos supera los 2000, solo se devuelven los primeros 2000.

    sub_aggs y sub_group_bys

    Operación de subagregación. Puede ejecutar esta operación a partir de los resultados de agrupación.

    • Escenario

      Consultar la cantidad de productos por categoría, así como el precio máximo y mínimo de cada una.

    • Método

      Agrupe los resultados de la consulta por categoría de producto para obtener la cantidad de artículos en cada una. Después, ejecute dos operaciones de subagregación para calcular el precio máximo y mínimo por categoría.

    • Resultado de ejemplo

      • Frutas: 5. El precio máximo es de 2 USD y el mínimo es de 0.5 USD.

      • Artículos de tocador: 10. El precio máximo es de 13 USD y el mínimo es de 0.1 USD.

      • Dispositivos electrónicos: 3. El precio máximo es de 1160 USD y el mínimo es de 310 USD.

      • Otros productos: 15. El precio máximo es de 130 USD y el mínimo es de 11 USD.

  • Ejemplo

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

Agrupación por rango

Método de agregación que agrupa los resultados de una consulta según los rangos de valores de un campo. Los valores que caen dentro de un mismo rango se agrupan entre sí. Se devuelve la cantidad de valores de cada rango.

  • Parámetros

    Parámetro

    Descripción

    name

    Nombre único de la operación de agregación. Con este nombre puede consultar los resultados de una operación específica.

    field_name

    Nombre del campo con el que se ejecuta la operación de agregación. Solo son compatibles los tipos LONG y DOUBLE.

    ranges[from, to)

    Rangos de valores que se usan para agrupar.

    El rango puede comenzar en Double.MIN_VALUE y terminar en Double.MAX_VALUE.

    sub_aggs y sub_group_bys

    Operación de subagregación. Puede ejecutar esta operación a partir de los resultados de agrupación.

    Por ejemplo, después de agrupar los resultados por volumen de ventas y por provincia, puede identificar cuál provincia concentra la mayor proporción de ventas dentro de un rango determinado. Para esta consulta, especifique un valor para GroupByField dentro de GroupByRange.

  • Ejemplo

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

Agrupación por ubicación geográfica

Método de agregación que agrupa los resultados de una consulta según la distancia desde distintas ubicaciones geográficas hasta un punto central. Los resultados cuyas distancias caen dentro de un mismo rango se agrupan entre sí. Se devuelve la cantidad de valores de cada rango.

  • Parámetros

    Parámetro

    Descripción

    name

    Nombre único de la operación de agregación. Con este nombre puede consultar los resultados de una operación específica.

    field_name

    Nombre del campo que se usa en la operación de agregación. Solo es compatible el tipo GEOPOINT.

    origin(lat, lon)

    Longitud y latitud del punto central.

    lat indica la latitud del punto central. lon indica la longitud del punto central.

    ranges[from, to)

    Rangos de distancia que se usan para agrupar, expresados en metros. Los valores de from y to son de tipo DOUBLE.

    El rango puede comenzar en Double.MIN_VALUE y terminar en Double.MAX_VALUE.

    sub_aggs y sub_group_bys

    Operación de subagregación. Puede ejecutar esta operación a partir de los resultados de agrupación.

  • Ejemplo

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

Agrupación por filtro

Método de agregación que filtra los resultados de una consulta y los agrupa para obtener la cantidad de coincidencias de cada filtro. Los resultados se devuelven en el mismo orden en el que se definieron los filtros.

  • Parámetros

    Parámetro

    Descripción

    name

    Nombre único de la operación de agregación. Con este nombre puede consultar los resultados de una operación específica.

    filters

    Filtros que se aplican en la consulta. Los resultados se devuelven en el mismo orden en el que se definieron los filtros.

    sub_aggs y sub_group_bys

    Operación de subagregación. Puede ejecutar esta operación a partir de los resultados de agrupación.

  • Ejemplo

    $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

Método de agregación que agrupa los resultados de una consulta según intervalos de datos específicos. Los valores de un campo que caen dentro del mismo intervalo se agrupan entre sí. Se devuelve el rango de valores de cada grupo y la cantidad de elementos que contiene.

  • Parámetros

    Parámetro

    Descripción

    name

    Nombre único de la operación de agregación. Con este nombre puede consultar los resultados de una operación específica.

    field_name

    Nombre del campo con el que se ejecuta la operación de agregación. Solo son compatibles los tipos LONG y DOUBLE.

    interval

    Intervalo de datos que se usa para obtener los resultados de la agregación.

    field_range[min,max]

    Rango que se usa junto con el parámetro interval para limitar la cantidad de grupos. El valor calculado con la fórmula no puede superar los 2000.

    min_doc_count

    Cantidad mínima de filas. Si un grupo tiene menos filas que este mínimo, no se devuelven sus resultados de agregación.

    missing

    Valor predeterminado que se asigna al campo cuando está vacío en una fila, para poder ejecutar la operación de agregación.

    • Si no especifica un valor para missing, la fila se ignora.

    • Si especifica un valor para missing, ese valor se toma como el valor del campo en dicha fila.

  • Ejemplo

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

Anidamiento

El anidamiento le permite ejecutar operaciones de subagregación dentro de un grupo. Por ejemplo, puede anidar operaciones de agregación hasta en dos niveles.

  • GroupBy + SubGroupBy: los elementos se agrupan por provincia y luego por ciudad para obtener los datos de cada ciudad dentro de cada provincia.

  • GroupBy + SubAggregation: los elementos se agrupan por provincia y se calcula el valor máximo de una métrica para obtener dicho valor por provincia.

Nota

Para equilibrar el rendimiento y la complejidad, solo se permite un número determinado de niveles de anidamiento. Para más información, 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);