O recurso collapse remove duplicatas de um conjunto de resultados de consulta com base em uma coluna especificada, garantindo que cada valor único apareça apenas uma vez nos resultados retornados. Use o collapse para manter a diversidade dos resultados quando uma única categoria domina o conjunto retornado.
Esse recurso deduplica (Distinct) na maioria dos cenários, funcionando como uma deduplicação pela coluna de colapso. No entanto, aplica-se apenas a colunas dos tipos inteiro, ponto flutuante e Keyword. Colunas do tipo array não são compatíveis, e o retorno limita-se aos primeiros 100.000 resultados ordenados.
Limites de uso
Antes de usar o recurso collapse, observe as seguintes restrições:
Tipos de coluna compatíveis — O recurso aplica-se exclusivamente a colunas dos tipos inteiro, ponto flutuante e Keyword. Não há suporte para colunas do tipo array.
Paginação — A paginação é suportada apenas por meio de offset e limit. Paginação baseada em token não está disponível.
Agregação — Ao combinar agregação estatística com o recurso collapse, a agregação considera apenas o conjunto de resultados anterior à operação de colapso.
Limite de contagem de grupos — Após a operação de colapso, o número total de grupos retornados depende da soma máxima de offset mais limit. O sistema retorna no máximo 100.000 grupos.
Contagem total — O número total de linhas na resposta corresponde às linhas correspondentes antes da operação de colapso. Não é possível obter a contagem total de grupos após essa operação.
Parâmetros
O recurso collapse é fornecido pela operação Search e implementado por meio do parâmetro collapse. A tabela a seguir descreve os parâmetros usados em uma consulta com collapse.
|
Parâmetro |
Descrição |
|
query |
Qualquer tipo de consulta. |
|
collapse |
Configurações de colapso, que incluem a definição de fieldName. fieldName: nome da coluna pela qual o conjunto de resultados será colapsado. Este parâmetro aplica-se apenas a colunas dos tipos inteiro, ponto flutuante e Keyword. Colunas do tipo array não são compatíveis. |
|
offset |
Posição inicial da consulta atual. |
|
limit |
Número máximo de linhas a retornar na consulta atual. Para obter apenas a contagem de linhas sem precisar dos dados, defina limit como 0. Nenhuma linha será retornada. |
|
getTotalCount |
Define se o número total de linhas correspondentes deve ser retornado. O valor padrão é false, indicando que a contagem total não será retornada. Retornar esse valor afeta o desempenho da consulta. |
|
tableName |
Nome da tabela de dados. |
|
indexName |
Nome do índice de busca. |
|
columnsToGet |
Especifica se todas as colunas devem ser retornadas. Inclui as configurações returnAll e columns. O valor padrão de returnAll é false, indicando que nem todas as colunas serão retornadas. Nesse caso, use columns para especificar quais retornar. Se você não usar columns para essa especificação, apenas as colunas de chave primária serão retornadas. Se definir returnAll como true, todas as colunas serão incluídas no resultado. |
Uso
Use a interface de linha de comando ou um SDK para colapsar resultados durante a consulta de dados.
-
Use uma conta Alibaba Cloud ou um usuário RAM com as permissões necessárias para operações no Table Store. Para conceder permissões a um usuário RAM, consulte Grant permissions to a RAM user by using a RAM policy.
Caso use um SDK ou ferramenta de linha de comando, crie um AccessKey para sua conta Alibaba Cloud ou usuário RAM, se ainda não possuir.
Você já criou uma tabela de dados.
Um Search Index foi criado para a tabela de dados.
Se for usar um SDK, inicialize o Tablestore Client.
Para usar a ferramenta de linha de comando, baixe e inicie a ferramenta, configure a conexão com sua instância e selecione a tabela desejada. Para mais informações, consulte Baixe a ferramenta de linha de comando, Inicie a ferramenta e configure as informações de conexão e Operações de tabela de dados.
Uso da interface de linha de comando
Execute o comando search na interface de linha de comando para consultar dados usando um índice de busca e configure o parâmetro Collapse nas condições de consulta para ativar o recurso. Para mais detalhes, consulte Search indexes.
Execute o comando
searchpara consultar dados na tabela por meio de um índice de busca e retornar todas as colunas indexadas.
search -n search_index --return_all_indexed
Insira as condições de consulta conforme solicitado. O código abaixo serve como exemplo:
{
"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 tabela a seguir descreve os principais campos do exemplo:
|
Campo |
Descrição |
|
Offset |
Posição inicial da consulta. O valor |
|
Limit |
Quantidade máxima de linhas a retornar. |
|
Collapse.FieldName |
Nome da coluna usada para deduplicação dos resultados. Neste exemplo, |
|
Query |
Condições da consulta. Este exemplo usa MatchQuery na coluna |
Após o retorno dos resultados, verifique se o recurso collapse funciona conforme esperado, confirmando que os valores na coluna de colapso são únicos nas linhas retornadas.
Uso de um SDK
Use o Java SDK, Go SDK, Python SDK, Node.js SDK, .NET SDK ou PHP SDK para colapsar resultados durante a consulta de dados. O exemplo a seguir usa o Java SDK para demonstrar o uso do recurso collapse.
O exemplo abaixo consulta todas as linhas, colapsa os resultados pelo campo category e ordena as linhas pelo campo price em ordem decrescente. A linha com o maior preço em cada categoria é retornada.
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 dados
No modo VCU (antigo modo Reservado), a consulta de dados via índice de busca consome recursos computacionais de VCUs. Já no modo CU (antigo modo Pay-As-You-Go), essa operação consome throughput de leitura. Para mais informações, consulte Search index billing.
A consulta de dados por meio de um índice de busca consome throughput de leitura. Para mais detalhes, consulte Billable items of search indexes.
O uso do recurso collapse durante consultas não altera as regras de faturamento vigentes.
Perguntas frequentes
Referências
O Search Index suporta diversos tipos de consulta para buscas multidimensionais, incluindo 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, e exists query.
Durante a consulta de dados, você pode sort and paginate o conjunto de resultados ou executar collapsing (deduplication).
Para análise de dados, como encontrar valores máximos ou mínimos, calcular somas ou contar linhas, use os recursos de statistical aggregation ou SQL query.
Para exportar dados rapidamente, independentemente da ordem do conjunto de resultados, use o recurso Parallel Scan.