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 retornam conforme a ordem definida. Se a resposta contiver muitas 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 |
Predefina um método de ordenação ao criar um índice de busca |
Por padrão, os dados em um índice de busca seguem as configurações de pré-ordenação do parâmetro IndexSort. Essas configurações determinam a ordem padrão de retorno das linhas correspondentes aos critérios da consulta. |
|
|
Especifique um método de ordenação durante a consulta de dados |
Ordenação por relevância de palavra-chave baseada em BM25 (ScoreSort) |
Use o ScoreSort para organizar os resultados da consulta com base na pontuação de relevância de palavras-chave calculada pelo algoritmo BM25. Este método é ideal para cenários como busca de texto completo. |
|
|
O PrimaryKeySort classifica os resultados da consulta pelo valor da chave primária. Use este método para ordenar dados pelos identificadores exclusivos. |
|||
|
O FieldSort ordena os resultados da consulta com base nos valores de uma ou mais colunas. Indicado para classificação por propriedades como volume de vendas ou visualizações de página. Seu uso é comum em setores como e-commerce, redes sociais e gestão de ativos de mídia. |
|||
|
Use o GeoDistanceSort para classificar os resultados da consulta por proximidade geográfica. Projetado para cenários em que a distância até um ponto específico é o critério principal, sendo frequente em aplicações de mapas e logística. Por exemplo, liste restaurantes próximos a um local ordenados pela distância. |
|||
|
Paginação |
Especifique um método de paginação durante a consulta de dados |
Se a resposta contiver menos de 100.000 linhas, use este método para navegar diretamente para uma página específica. |
|
|
Este recurso retorna os dados página por página e permite apenas a navegação para frente. Para voltar a uma página anterior, armazene em cache e reutilize um token anterior, pois os tokens permanecem válidos durante a consulta. |
Pré-ordenação de índice
Por padrão, o Tablestore organiza os dados em 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. Se você não especificar 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 a pré-ordenação de índice em índices de busca que contenham campos do tipo aninhado (nested).
Após criar o índice de busca, use o recurso de modificação dinâmica de esquema para alterar as configurações de
IndexSort.
Especifique um método de ordenação ao consultar dados
Aplique a ordenação apenas a campos cujo parâmetro enable_sort_and_agg esteja definido como true.
ScoreSort
ScoreSort
Classifica os resultados da consulta pela pontuação de relevância, calculada pelo algoritmo BM25. Ideal para 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 aplicará as configurações deIndexSortdo índice.Ao usar o
ScoreSort, campos do tipo FuzzyKeyword ficam excluídos da ordenação e o parâmetroweightnão surte efeito sobre eles.
'sort' => array(
array(
'score_sort' => array(
'order' => SortOrderConst::SORT_ORDER_DESC
)
),
)
PrimaryKeySort
'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
'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
Ordene 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
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 inferior a 100.000. A soma de limit e offset deve ser menor ou igual a 100.000, e o valor máximo para limit é 100.
Para aumentar o limiar de limit, consulte Como aumento o limite da API Search para 1.000?.
$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
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.
Índices de busca com campos do tipo Nested não suportam IndexSort. Se precisar paginar dados usando um índice de busca com campos do tipo Nested, 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 devolver apenas parte dos dados correspondentes aos critérios da consulta.
$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 usar um índice de busca para consultar dados, utilize os seguintes métodos: consulta por termo, consulta por termos, consulta match all, consulta match, consulta match phrase, consulta por prefixo, consulta por intervalo, consulta por curinga, consulta booleana, consulta geográfica, consulta aninhada e consulta exists. Combine diferentes métodos para buscar dados em 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 Ordenação e paginação.
Para consolidar o conjunto de resultados com base em uma coluna específica, use o recurso collapse (distinct). Dessa forma, os dados do tipo especificado aparecem apenas uma vez nos resultados da consulta. Para mais informações, consulte Collapse (distinct).
Para analisar dados em uma tabela, como obter valores extremos, soma e número total de linhas, execute operações de agregação ou instruções SQL. Para mais informações, consulte Agregação e Consulta SQL.
Para obter rapidamente todas as linhas que atendem aos critérios da consulta sem ordená-las, chame as operações ParallelScan e ComputeSplits para usar o recurso de varredura paralela. Para mais informações, consulte Varredura paralela.