Ao consultar dados com um índice de busca, use um método de ordenação predefinido ou especifique um método personalizado. Assim, as linhas que atendem aos critérios da consulta são retornadas conforme a ordem definida. Se a resposta contiver um grande volume de linhas, localize os dados necessários configurando os parâmetros limit e offset ou usando tokens.
Cenários
|
Categoria |
Método |
Recurso |
Cenário |
|
Ordenação |
Predefinir um método de ordenação ao criar um índice de busca |
Por padrão, os dados em um índice de busca seguem a pré-ordenação definida pelo parâmetro IndexSort. Essa configuração determina a ordem padrão de retorno das linhas correspondentes aos critérios da consulta. |
|
|
Especificar um método de ordenação durante a consulta |
Sorting based on the BM25-based keyword relevance score (ScoreSort) |
Use o ScoreSort para classificar resultados com base na pontuação de relevância de palavras-chave (algoritmo BM25). Esse método é ideal para cenários como busca de texto completo. |
|
|
O PrimaryKeySort organiza os resultados conforme o valor da chave primária. Use este método quando a ordenação precisar seguir os identificadores únicos dos dados. |
|||
|
Sorting based on the values of one or more columns (FieldSort) |
Com o FieldSort, a classificação ocorre pelos valores de uma ou mais colunas. Esse recurso é adequado para organizar dados por propriedades como volume de vendas ou visualizações de página, sendo comum em setores de e-commerce, redes sociais e ativos de mídia. |
||
|
O GeoDistanceSort classifica os resultados pela localização geográfica. É indicado para cenários que exigem ordenação por distância a partir de um ponto específico, como em aplicações de mapas e logística. Por exemplo, liste restaurantes próximos com base na distância do usuário. |
|||
|
Paginação |
Definir um método de paginação ao consultar dados |
Aplique este método para navegar diretamente a uma página específica quando o total de linhas na resposta for inferior a 100.000. |
|
|
Esse recurso retorna os dados página por página, permitindo apenas a navegação para frente. Para retroceder, armazene em cache um token anterior, pois os tokens permanecem válidos durante toda a consulta. |
Pré-ordenação de índice
Por padrão, o Tablestore organiza os dados de um índice de busca segundo uma ordem predefinida, denominada pré-ordenação de índice (IndexSort). Durante as consultas, o IndexSort estabelece a sequência padrão dos resultados retornados.
Ao criar um índice de busca, personalize o IndexSort. Caso não especifique essa configuração, o índice adotará a ordenação por chave primária como padrão.
A pré-ordenação de índice suporta apenas
PrimaryKeySort(ordenação por chave primária) eFieldSort(ordenação por campo).Não use pré-ordenação em índices de busca que contenham campos do tipo aninhado (nested).
Após a criação do índice de busca, o recurso dynamic schema modification permite modificar as configurações de
IndexSort.
Especifique um método de ordenação ao consultar dados
A ordenação só pode ser aplicada a campos cujo parâmetro enable_sort_and_agg esteja definido como true.
Defina um método de ordenação para cada consulta. Um índice de busca oferece suporte a quatro tipos de classificadores. Também é possível combinar vários classificadores para organizar os resultados segundo uma sequência de critérios.
ScoreSort
ScoreSort
Classifica os resultados da consulta pela pontuação de relevância, calculada com o algoritmo BM25. Esse método atende a cenários baseados em relevância, como buscas de texto completo.
Para ordenar por pontuação de relevância, especifique explicitamente o
ScoreSort. Caso contrário, o Tablestore classificará os resultados conforme as definições deIndexSortdo índice.Ao usar o
ScoreSort, campos do tipo FuzzyKeyword não participam da ordenação, e o parâmetroweightnão surte efeito sobre eles.
'sort' => array(
array(
'score_sort' => array(
'order' => SortOrderConst::SORT_ORDER_DESC
)
),
)
PrimaryKeySort
Ordena os resultados pela chave primária.
'sort' => array(
array(
'pk_sort' => array(
'order' => SortOrderConst::SORT_ORDER_ASC
)
),
)
FieldSort
Use o FieldSort para classificar os resultados da consulta com base nos valores de uma ou mais colunas específicas.
'sort' => array(
array(
'field_sort' => array(
'field_name' => 'keyword',
'order' => SortOrderConst::SORT_ORDER_ASC,
'mode' => SortModeConst::SORT_MODE_AVG,
)
),
)
GeoDistanceSort
Classifica os resultados pela distância em relação a um ponto geográfico.
'sort' => array(
array(
'geo_distance_sort' => array(
'field_name' => 'geo',
'order' => SortOrderConst::SORT_ORDER_ASC,
'distance_type' => GeoDistanceTypeConst::GEO_DISTANCE_PLANE,
'points' => array('0.6,0.6')
)
),
)
Combinação de múltiplos métodos de ordenação
Organize os resultados da consulta com base nos valores de duas colunas em ordens específicas para definir a sequência de retorno dos dados correspondentes.
'sort' => array(
array(
'field_sort' => array(
'field_name' => 'keyword',
'order' => SortOrderConst::SORT_ORDER_ASC,
'mode' => SortModeConst::SORT_MODE_AVG,
)
),
array(
'pk_sort' => array(
'order' => SortOrderConst::SORT_ORDER_ASC
)
),
)
Especifique um método de paginação
Para paginar os resultados da consulta, use os parâmetros limit e offset ou um token.
Configure os parâmetros limit e offset
Paginação baseada em offset
Use a paginação baseada em offset quando o total de linhas a recuperar for menor que 100.000. A soma de limit e offset deve ser igual ou inferior a 100.000, e o valor máximo para limit é 100.
Para aumentar o limiar de limit, consulte How do I increase the limit for the Search API to 1,000?.
Caso não defina os parâmetros limit e offset, o limit assumirá o valor padrão 10 e o offset será 0.
$request = array(
'table_name' => 'php_sdk_test',
'index_name' => 'php_sdk_test_search_index',
'search_query' => array(
'offset' => 10,
'limit' => 10,
'get_total_count' => true,
'query' => array(
'query_type' => QueryTypeConst::MATCH_ALL_QUERY
),
'sort' => array(
array(
'field_sort' => array(
'field_name' => 'keyword',
'order' => SortOrderConst::SORT_ORDER_ASC
)
),
),
'token' => null,
),
'columns_to_get' => array(
'return_type' => ColumnReturnTypeConst::RETURN_SPECIFIED,
'return_names' => array('col1', 'col2')
)
);
$response = $otsClient->search($request);
Use um token
A paginação baseada em token é recomendada para navegações profundas, pois não possui limite de profundidade.
Se o Tablestore não conseguir ler todos os dados que atendem aos critérios da consulta, ele retornará next_token. Use next_token para continuar a leitura dos dados subsequentes.
Por padrão, a paginação por token permite apenas avançar nos resultados. No entanto, como o token permanece válido durante todo o processo de consulta, armazene um token anterior em cache para retroceder na paginação.
Ao paginar com um token, a ordem de classificação segue a mesma da solicitação anterior, seja ela baseada no IndexSort padrão ou em uma ordenação personalizada. Portanto, não defina um parâmetro Sort ao usar um token. Também não configure um offset, pois a leitura dos dados ocorre sequencialmente.
Índices de busca contendo campos do tipo Nested não suportam IndexSort. Se precisar de paginação e usar um índice de busca com campos Nested para consultar dados, especifique o método de ordenação nas condições da consulta para retornar os dados na ordem desejada. Caso contrário, o Tablestore não retornará next_token quando apenas parte dos dados correspondentes aos critérios for recuperada.
$request = array(
'table_name' => 'php_sdk_test',
'index_name' => 'php_sdk_test_search_index',
'search_query' => array(
'offset' => 0,
'limit' => 10,
'get_total_count' => true,
'query' => array(
'query_type' => QueryTypeConst::FUNCTION_SCORE_QUERY,
'query' => array(
'query' => array(
'query_type' => QueryTypeConst::TERM_QUERY,
'query' => array(
'field_name' => 'keyword',
'term' => 'keyword'
)
),
'field_value_factor' => array(
'field_name' => 'long'
)
)
),
'sort' => array(
array(
'score_sort' => array(
'order' => SortOrderConst::SORT_ORDER_DESC
)
),
)
),
'columns_to_get' => array(
'return_type' => ColumnReturnTypeConst::RETURN_SPECIFIED,
'return_names' => array('keyword', 'long')
)
);
$response = $otsClient->search($request);
print "total_hits: " . $response['total_hits'] . "\n";
print json_encode($response['rows'], JSON_PRETTY_PRINT);
while($response['next_token'] != null) {
$request['search_query']['token'] = $response['next_token'];
$request['search_query']['sort'] = null;// If next_token is included in the response, you cannot specify the sorting method because the token includes the sorting information.
$response = $otsClient->search($request);
print json_encode($response['rows'], JSON_PRETTY_PRINT);
}
Perguntas frequentes
Referências
-
Ao consultar dados com um índice de busca, use os seguintes métodos: term query, terms query, match all query, match query, match phrase query, prefix query, range query, wildcard query, Boolean query, geo query, nested query e exists query. Combine diferentes métodos para consultar dados sob múltiplas dimensões, conforme as necessidades do seu negócio.
Para ordenar ou paginar as linhas que atendem aos critérios da consulta, use o recurso de ordenação e paginação. Para mais informações, consulte Sorting and paging.
Caso precise agrupar o conjunto de resultados com base em uma coluna específica, use o recurso de colapso (distinct). Dessa forma, os dados do tipo especificado aparecerão apenas uma vez nos resultados da consulta. Para mais informações, consulte Collapse (distinct).
Para analisar dados em uma tabela, como obter valores extremos, somas e o número total de linhas, execute operações de agregação ou instruções SQL. Para mais informações, consulte Aggregation e SQL query.
Se precisar obter rapidamente todas as linhas que correspondem aos critérios de consulta sem a necessidade de ordená-las, chame as operações ParallelScan e ComputeSplits para usar o recurso de varredura paralela. Para mais informações, consulte Parallel scan.