Ao consultar um search index com o Tablestore SDK for Java, é possível colapsar os resultados por um campo específico para retornar apenas uma linha por valor distinto desse campo.
Pré-requisitos
Instale o Tablestore SDK for Java e inicialize um cliente.
Como funciona
O colapso de campos agrupa linhas correspondentes pelo valor de um campo específico do search index e retorna uma linha representativa por grupo. A ordem de classificação efetiva determina a linha retornada em cada grupo. Use sorting and pagination para configurar essa ordenação. O colapso altera apenas a exibição dos resultados da consulta, sem modificar os dados na tabela de dados.
Ative a classificação e a agregação para o campo de colapso. Esse campo deve ser do tipo Keyword, Long ou Double e não pode ser um array.
Consultas com colapso aceitam apenas paginação baseada em limit e offset. A paginação baseada em token não é compatível. A soma de
limiteoffsetnão pode exceder100000.Agregações e group-bys operam sobre os resultados correspondentes antes do colapso. A contagem total de linhas reflete o número de linhas correspondentes antes dessa operação. Não é possível obter o número total de grupos após o colapso.
Chame search para consultar dados e configure SearchQuery.collapse para especificar o campo de colapso.
SearchResponse search(SearchRequest request)
O exemplo abaixo consulta todas as linhas, colapsa os resultados pelo campo category e ordena as linhas pelo campo price em ordem decrescente. O sistema retorna a linha com o maior preço em cada categoria.
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());
Parâmetros
Solicitação de consulta
O parâmetro request é do tipo SearchRequest. A tabela a seguir descreve seus parâmetros.
|
Nome |
Tipo |
Descrição |
|
tableName (obrigatório) |
String |
Nome da tabela de dados. |
|
indexName (obrigatório) |
String |
Nome do search index. |
|
searchQuery (obrigatório) |
SearchQuery |
Condição de consulta e configuração de colapso. |
|
columnsToGet (opcional) |
SearchRequest.ColumnsToGet |
Colunas a retornar. Se este parâmetro não for configurado, o sistema retorna apenas as colunas de chave primária. |
|
timeoutInMillisecond (opcional) |
int |
Tempo limite da consulta no nível da solicitação, em milissegundos. Valor padrão: |
|
routingValues (opcional) |
|
Valores de chave primária dos campos de roteamento personalizado. Ignore este parâmetro se não utilizar roteamento personalizado. |
Configuração de consulta
O parâmetro request.searchQuery é do tipo SearchQuery. A tabela a seguir descreve seus parâmetros.
|
Nome |
Tipo |
Descrição |
|
query (obrigatório) |
Query |
Condição da consulta. Aceita tipos de consulta de search index. |
|
collapse (obrigatório) |
Collapse |
Configuração de colapso. |
|
offset (opcional) |
Integer |
Posição do grupo onde a consulta atual começa. Valor padrão: |
|
limit (opcional) |
Integer |
Número máximo de grupos a retornar. Valor padrão: |
|
highlight (opcional) |
Highlight |
Configuração de resumo e destaque. O retorno de resultados destacados depende do tipo de consulta e da configuração do campo de índice. |
|
sort (opcional) |
Sort |
Ordem de classificação dos resultados. Determina a linha representativa retornada de cada grupo e a ordem dos grupos. Se este parâmetro não for configurado, o sistema usa a classificação do índice. |
|
trackTotalCount (opcional) |
int |
Número máximo esperado de linhas correspondentes a contar. Valor padrão: |
|
filter (opcional) |
SearchFilter |
Filtro aplicado aos resultados de |
|
aggregationList (opcional) |
|
Configurações de agregação. As agregações operam sobre os resultados correspondentes antes do colapso. |
|
groupByList (opcional) |
|
Configurações de group-by. Os group-bys operam sobre os resultados correspondentes antes do colapso. |
|
token (opcional) |
byte[] |
Token de paginação. Não configure este parâmetro ao usar colapso de campos. |
Configuração de colapso
O parâmetro request.searchQuery.collapse é do tipo Collapse. A tabela a seguir descreve seu parâmetro.
|
Nome |
Tipo |
Descrição |
|
fieldName (obrigatório) |
String |
Nome do campo de colapso. A classificação e a agregação devem estar ativadas para o campo. Ele deve ser do tipo Keyword, Long ou Double e não pode ser um array. |
Colunas a retornar
O parâmetro request.columnsToGet é do tipo SearchRequest.ColumnsToGet. A tabela a seguir descreve seus parâmetros.
|
Nome |
Tipo |
Descrição |
|
columns (opcional) |
|
Nomes das colunas de atributo a retornar. Configure este parâmetro apenas se tanto |
|
returnAll (opcional) |
boolean |
Especifica se todas as colunas de atributo da tabela de dados devem ser retornadas. Valor padrão: |
|
returnAllFromIndex (opcional) |
boolean |
Especifica se todas as colunas de atributo armazenadas no search index devem ser retornadas. Valor padrão: |
Resposta
O método search retorna SearchResponse. A tabela a seguir descreve os campos relacionados ao colapso de campos.
|
Nome |
Tipo |
Descrição |
|
totalCount |
long |
Quantidade de linhas correspondentes antes do colapso. Chame |
|
rows |
|
Linhas após o colapso. Chame |
|
searchHits |
|
Resultados de busca após o colapso. Chame |
|
isAllSuccess |
boolean |
Indica se todas as partições do índice foram consultadas. Chame |
|
aggregationResults |
AggregationResults |
Resultados de agregação calculados a partir das linhas correspondentes antes do colapso. Chame |
|
groupByResults |
GroupByResults |
Resultados de group-by calculados a partir das linhas correspondentes antes do colapso. Chame |