La función collapse elimina los duplicados de un conjunto de resultados de consulta según una columna especificada, de modo que cada valor único aparece solo una vez en los resultados devueltos. Utilice collapse para mantener la diversidad de los resultados cuando una sola categoría domina el conjunto.
La función collapse logra la deduplicación (Distinct) en la mayoría de los escenarios, lo cual equivale a eliminar duplicados por la columna de colapso. Sin embargo, solo se aplica a columnas de tipo entero, número de punto flotante y Keyword; no admite columnas de tipo array y devuelve únicamente los primeros 100,000 resultados ordenados.
Límites de uso
Antes de utilizar la función collapse, tenga en cuenta las siguientes restricciones:
Tipos de columna compatibles: La función collapse solo se aplica a columnas de tipo entero, número de punto flotante y Keyword. Las columnas de tipo array no son compatibles.
Paginación: La función collapse solo admite paginación mediante offset y limit. No es compatible con la paginación basada en token.
Agregación: Cuando se utiliza la agregación estadística junto con la función collapse, la agregación se aplica únicamente al conjunto de resultados previo a la operación de colapso.
Límite de recuento de grupos: Después de la operación de colapso, el número total de grupos devueltos depende del valor máximo de offset más limit. Se pueden devolver hasta 100,000 grupos como máximo.
Recuento total: El número total de filas en la respuesta corresponde a la cantidad de filas coincidentes antes de la operación de colapso. No es posible obtener el número total de grupos después de dicha operación.
Parámetros
La función collapse se proporciona mediante la operación Search y se implementa con el parámetro collapse. A continuación se describen los parámetros utilizados en una consulta con collapse.
|
Parámetro |
Descripción |
|
query |
Cualquier tipo de consulta. |
|
collapse |
Configuración de collapse, que incluye el ajuste fieldName. fieldName: nombre de la columna por la cual se colapsa el conjunto de resultados. Este parámetro solo se aplica a columnas de tipo entero, número de punto flotante y Keyword. Las columnas de tipo array no son compatibles. |
|
offset |
Posición desde la cual comienza la consulta actual. |
|
limit |
Número máximo de filas que se devolverán en la consulta actual. Si solo desea obtener el recuento de filas sin necesidad de los datos, establezca limit en 0. No se devolverá ninguna fila. |
|
getTotalCount |
Especifica si se debe devolver el número total de filas coincidentes. El valor predeterminado es false, lo que indica que no se devuelve dicho recuento. Devolver el total de filas coincidentes afecta el rendimiento de la consulta. |
|
tableName |
Nombre de la tabla de datos. |
|
indexName |
Nombre del índice de búsqueda. |
|
columnsToGet |
Especifica si se deben devolver todas las columnas. Este parámetro incluye los ajustes returnAll y columns. El valor predeterminado de returnAll es false, lo que indica que no se devuelven todas las columnas. En este caso, puede usar columns para especificar cuáles devolver. Si no utiliza columns para indicarlas, solo se devuelven las columnas de clave primaria. Si establece returnAll en true, se devuelven todas las columnas. |
Uso
Puede utilizar la interfaz de línea de comandos o un SDK para colapsar resultados al consultar datos.
-
Utilice una cuenta de Alibaba Cloud o un usuario RAM con los permisos obligatorios para operaciones de Table Store. Para otorgar permisos a un usuario RAM, consulte Grant permissions to a RAM user by using a RAM policy.
Si utiliza un SDK o una herramienta de línea de comandos, create an AccessKey para su cuenta de Alibaba Cloud o usuario RAM en caso de que aún no cuente con uno.
Debe contar con created a data table.
Se ha creado un Search Index para la tabla de datos.
Si utiliza un SDK, initialize the Tablestore Client.
Si utiliza la herramienta de línea de comandos, descargue e inicie la herramienta; luego configure la conexión a su instancia y seleccione la tabla destino. Para obtener más información, consulte Download the command-line tool, Start the tool and configure connection information y Data table operations.
Uso de la interfaz de línea de comandos
Ejecute el comando search en la interfaz de línea de comandos para consultar datos mediante un índice de búsqueda y configure el parámetro Collapse en las condiciones de consulta para utilizar la función collapse. Para obtener más información, consulte Search indexes.
Ejecute el comando
searchpara consultar datos en la tabla mediante un índice de búsqueda y devolver todas las columnas indexadas.
search -n search_index --return_all_indexed
Introduzca las condiciones de consulta cuando se le solicite. El siguiente código muestra un ejemplo:
{
"Offset": -1,
"Limit": 10,
"Collapse": {
"FieldName": "product_name"
},
"Sort": null,
"GetTotalCount": true,
"Token": null,
"Query": {
"Name": "MatchQuery",
"Query": {
"FieldName": "user_id",
"Text": "00002",
"MinimumShouldMatch": 1
}
}
}
A continuación se describen los campos clave del ejemplo:
|
Campo |
Descripción |
|
Offset |
Posición desde la cual comienza la consulta. Un valor de |
|
Limit |
Número máximo de filas que se devolverán. |
|
Collapse.FieldName |
Nombre de la columna por la cual se eliminan los duplicados en los resultados. En este ejemplo, se utiliza |
|
Query |
Condiciones de la consulta. Este ejemplo utiliza una MatchQuery en la columna |
Una vez que la consulta devuelva resultados, compruebe que la función collapse opera correctamente al verificar que los valores en la columna de colapso sean únicos en todas las filas retornadas.
Uso de un SDK
Puede utilizar Java SDK, Go SDK, Python SDK, Node.js SDK, .NET SDK o PHP SDK para colapsar resultados al consultar datos. El siguiente ejemplo utiliza el SDK de Java para describir cómo emplear la función collapse.
El siguiente ejemplo consulta todas las filas, colapsa los resultados por el campo category y ordena las filas por el campo price en orden descendente. Se devuelve la fila con el precio más alto de cada categoría.
SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(new MatchAllQuery());
searchQuery.setLimit(10);
searchQuery.setCollapse(new Collapse("category"));
searchQuery.setSort(new Sort(
Arrays.asList(new FieldSort("price", SortOrder.DESC))));
SearchRequest.ColumnsToGet columnsToGet =
new SearchRequest.ColumnsToGet();
columnsToGet.setColumns(Arrays.asList("category", "price"));
SearchRequest request =
new SearchRequest("example_table", "example_index", searchQuery);
request.setColumnsToGet(columnsToGet);
SearchResponse response = client.search(request);
System.out.println(response.getRows());
Consulta de datos
En el modo VCU (anteriormente modo Reserved), la consulta de datos mediante un índice de búsqueda consume recursos de cómputo de VCU. En el modo CU (anteriormente modo Pay-As-You-Go), la consulta de datos mediante un índice de búsqueda consume throughput de lectura. Para obtener más información, consulte Search index billing.
La consulta de datos mediante un índice de búsqueda consume throughput de lectura. Para obtener más información, consulte Billable items of search indexes.
El uso de la función collapse durante la consulta de datos no afecta las reglas de facturación existentes.
Preguntas frecuentes
Referencias
Search Index admite diversos tipos de consulta para búsquedas multidimensionales de datos, entre ellos term query, terms query, match all query, match query, phrase match query, range query, prefix query, suffix query, wildcard query, token-based wildcard query, boolean query, geo query, nested query, vector search, y exists query.
Al consultar datos, puede sort and paginate el conjunto de resultados o realizar collapsing (deduplication).
Para el análisis de datos, como encontrar el valor máximo o mínimo, calcular una suma o contar filas, puede utilizar las funciones statistical aggregation o SQL query.
Para exportar datos rápidamente sin importar el orden del conjunto de resultados, puede utilizar la función Parallel Scan.