Todos os produtos
Search
Central de documentação

Tablestore:Ordenação e paginação

Última atualização: Oct 09, 2026

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

Index presorting (IndexSort)

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.

Sorting based on the primary key value (PrimaryKeySort)

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.

Sorting by geographical location (GeoDistanceSort)

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

Paging based on the limit and offset parameters

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.

Paging based on tokens

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.

Importante
  • A pré-ordenação de índice suporta apenas PrimaryKeySort (ordenação por chave primária) e FieldSort (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.

Importante
  • Para ordenar por pontuação de relevância, especifique explicitamente o ScoreSort. Caso contrário, o Tablestore classificará os resultados conforme as definições de IndexSort do índice.

  • Ao usar o ScoreSort, campos do tipo FuzzyKeyword não participam da ordenação, e o parâmetro weight nã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.

Nota

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.

Importante

Í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.