Todos os produtos
Search
Central de documentação

Tablestore:Ordenação e paginação

Última atualização: Jul 03, 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 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

Pré-ordenação de índice (IndexSort)

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.

Ordenação por valor de chave primária (PrimaryKeySort)

O PrimaryKeySort classifica os resultados da consulta pelo valor da chave primária. Use este método para ordenar dados pelos identificadores exclusivos.

Ordenação por valores de uma ou mais colunas (FieldSort)

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.

Ordenação por localização geográfica (GeoDistanceSort)

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

Paginação baseada nos parâmetros limit e offset

Se a resposta contiver menos de 100.000 linhas, use este método para navegar diretamente para uma página específica.

Paginação baseada em tokens

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.

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

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

  • Ao usar o ScoreSort, campos do tipo FuzzyKeyword ficam excluídos 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

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

Nota

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.

Importante

Í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