Todos os produtos
Search
Central de documentação

Tablestore:Sorting and paging

Última atualização: Oct 09, 2026

Ao consultar dados com um índice de pesquisa, aplique uma ordem de classificação predefinida ou defina uma no momento da consulta. Para navegar por grandes conjuntos de resultados, use limit e offset para paginação por deslocamento ou use tokens para paginação por cursor.

Cenários

Categoria

Método

Recurso

Cenário

Ordenação

Predefina um método de ordenação ao criar um índice de pesquisa

Index presorting (IndexSort)

Por padrão, o Tablestore retorna os resultados na ordem definida pelo parâmetro IndexSort, configurado durante a criação do índice.

Especifique um método de ordenação ao consultar dados

Sorting based on the BM25-based keyword relevance score (ScoreSort)

Ordene os resultados pela pontuação de relevância BM25. Ideal para pesquisas de texto completo.

Sorting based on the primary key value (PrimaryKeySort)

Ordene os resultados pelo valor da chave primária. Útil para ordenar resultados por identificadores exclusivos de linha.

Sorting based on the values of one or more columns (FieldSort)

Ordene os resultados por um ou mais valores de coluna, como volume de vendas ou visualizações de página. Uso comum em e-commerce, redes sociais e gerenciamento de ativos de mídia.

Sorting by geographical location (GeoDistanceSort)

Ordene os resultados pela distância de um ponto central. Uso comum em mapeamento e logística — por exemplo, para ordenar restaurantes próximos por distância.

Paginação

Especifique um método de paginação ao consultar dados

Paging based on the limit and offset parameters

Acesse diretamente qualquer página quando o conjunto de resultados contiver menos de 100.000 linhas.

Paging based on tokens

Navegue pelos resultados sequencialmente usando um cursor, com avanço apenas para frente. Os tokens permanecem válidos durante toda a consulta, permitindo armazenar um token anterior em cache para retornar a uma página prévia.

Pré-ordenação de índice

Por padrão, o Tablestore ordena os dados em um índice de pesquisa com base em uma ordem predefinida, chamada de pré-ordenação de índice (IndexSort). Ao consultar dados, o IndexSort determina a ordem padrão dos resultados.

Ao criar um índice de pesquisa, você pode personalizar o IndexSort. Caso não especifique essa configuração, o índice usará a ordenação por chave primária por 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 um índice de pesquisa que contenha campos do tipo aninhado.

  • Após criar um índice de pesquisa, use o recurso dynamic schema modification para modificar as configurações do IndexSort.

Especifique um método de ordenação

Para ordenar, defina enableSortAndAgg como true nos campos de ordenação.

Especifique um método de ordenação para cada consulta. Um índice de pesquisa suporta os quatro tipos de ordenadores a seguir. Também é possível combinar vários ordenadores para ordenar os resultados com base em uma sequência de critérios.

ScoreSort

Ordena os resultados da consulta pela pontuação de relevância, calculada pelo algoritmo BM25. Esse método é adequado para cenários baseados em relevância, como pesquisas de texto completo.

Importante
  • Para ordenar pela pontuação de relevância, especifique explicitamente o ScoreSort. Caso contrário, o Tablestore ordena os resultados de acordo com as configurações de IndexSort do índice.

  • Ao usar o ScoreSort, a ordenação não inclui campos do tipo FuzzyKeyword, e o parâmetro weight não tem efeito sobre esses campos.

Use o ScoreSort para ordenar os resultados pela pontuação de relevância BM25, em ordem crescente ou decrescente.

sort: {
    sorters: [
        {
            scoreSort: {
                order: TableStore.SortOrder.SORT_ORDER_ASC
            }
        }
    ]
}

PrimaryKeySort

Ordena os resultados pela chave primária.

Use o PrimaryKeySort para ordenar os resultados pelo valor da chave primária.

sort: {
    sorters: [
        {
            primaryKeySort: {
                order: TableStore.SortOrder.SORT_ORDER_DESC // Sort in descending order.
                //order: TableStore.SortOrder.SORT_ORDER_ASC // Sort in ascending order.
            }
        }
    ]
}

FieldSort

Use o FieldSort para ordenar os resultados por um ou mais valores de coluna.

Ordenar por uma única coluna

sort: {
    sorters: [
        {
            fieldSort: {
                fieldName: "Col_Keyword",
                order: TableStore.SortOrder.SORT_ORDER_DESC
            }
        }
    ]
}

Ordenar por várias colunas

Especifique vários ordenadores para ordenar primeiro por uma coluna primária e, em seguida, desempatar usando uma coluna secundária.

sort: {
    sorters: [
        {
            fieldSort: {
                fieldName: "Col_Keyword",
                order: TableStore.SortOrder.SORT_ORDER_DESC
            }
        },
        {
            fieldSort: {
                fieldName: "Col_Long",
                order: TableStore.SortOrder.SORT_ORDER_DESC
            }
        }
    ]
}

GeoDistanceSort

Ordena os resultados pela distância de um ponto geográfico.

Use o GeoDistanceSort para ordenar os resultados pela distância de um ponto geográfico central.

sort: {
    sorters: [
        {
            geoDistanceSort: {
                fieldName: "Col_Geo_Point",
                points: ["0,0"],// Specify the coordinate pair of the central point.
                order: TableStore.SortOrder.SORT_ORDER_ASC // Return results in ascending order of distance.
            }
        }
    ]
}

Para um exemplo completo, consulte Search no GitHub.

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 deslocamento

Use a paginação baseada em deslocamento quando o número total de linhas a recuperar for menor que 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 How do I increase the limit for the Search API to 1,000?.

Caso não defina os parâmetros limit e offset, o valor padrão de limit será 10 e o de offset será 0.

Use offset e limit para acessar diretamente qualquer página. Esse método suporta conjuntos de resultados de até 100.000 linhas.

/**
 * Set offset to 90 and limit to 10 to retrieve rows 90–99.
 */
client.search({
    tableName: TABLE_NAME,
    indexName: INDEX_NAME,
    searchQuery: {
        offset: 90,
        limit: 10,
        query: {
            queryType: TableStore.QueryType.MATCH_ALL_QUERY
        },
        getTotalCount: true // Return the total number of matching rows. Default: false.
    },
    columnToGet: {
        // RETURN_ALL: return all columns.
        // RETURN_SPECIFIED: return specified columns.
        // RETURN_NONE: return primary key columns only.
        returnType: TableStore.ColumnReturnType.RETURN_ALL
    }
}, function (err, data) {
    if (err) {
        console.log('error:', err);
        return;
    }
    console.log('success:', JSON.stringify(data, null, 2));
});

Use um token

A paginação baseada em token é recomendada para paginação profunda por não ter limite de profundidade.

Se uma resposta não contiver todos os dados correspondentes, o servidor retorna um nextToken.

Por padrão, a paginação baseada em token permite apenas avançar pelos resultados. No entanto, como o token permanece válido durante todo o processo de consulta, armazene um token anterior em cache para paginar para trás.

A paginação baseada em token retorna os resultados página por página usando um cursor (NextToken). Cada resposta inclui um token para a próxima página. Os tokens são válidos durante a consulta; portanto, armazene um token anterior em cache para navegar de volta a uma página anterior.

Importante

Para persistir ou passar o NextToken para uma página de frontend, codifique-o como uma string Base64. Os tokens são dados binários (fluxo de bytes), não strings — o uso de string(NextToken) causa perda de dados. Faça a conversão usando Buffer:

  1. Codifique: data.nextToken.toString("base64")

  2. Decodifique: Buffer.from(base64String, "base64")

Ao paginar com um token, a ordem de classificação é a mesma da solicitação anterior, seja com o IndexSort padrão ou uma ordenação personalizada. Portanto, não defina um parâmetro Sort ao usar um token. Também não defina um offset, pois a leitura dos dados ocorre apenas de forma sequencial.

Importante

Um índice de pesquisa com um campo do tipo aninhado não suporta pré-ordenação de índice. Se precisar paginar os resultados de um índice desse tipo, especifique uma ordem de classificação na consulta. Caso contrário, o servidor não retorna um nextToken, mesmo que haja mais dados disponíveis.

Os exemplos a seguir mostram a paginação baseada em token nos modos síncrono e assíncrono. Ambos usam o mesmo objeto params inicial.

var params = {
    tableName: TABLE_NAME,
    indexName: INDEX_NAME,
    searchQuery: {
        offset: 0,
        limit: 10,
        token: null, // Set to nextToken from the previous response to fetch the next page.
        query: {
            queryType: TableStore.QueryType.MATCH_ALL_QUERY
        },
        getTotalCount: true
    },
    columnToGet: {
        returnType: TableStore.ColumnReturnType.RETURN_SPECIFIED,
        returnNames: ["pic_tag", "pic_description", "time_stemp", "pos"]
    }
};

/**
 * Synchronous mode: await each page before fetching the next.
 */
(async () => {
  try {
    var data = await client.search(params);
    console.log('success:', JSON.stringify(data, null, 2));

    while (data.nextToken && data.nextToken.length) {
      // Encode the binary token as Base64 for storage or transfer,
      // then decode it back to binary before passing it as the next token.
      var nextToken = data.nextToken.toString("base64");
      var token = Buffer.from(nextToken, "base64");

      params.searchQuery.token = token;
      data = await client.search(params);
      console.log('token success:', JSON.stringify(data, null, 2));
    }
  } catch (error) {
      console.log(error);
  }
})()

/**
 * Asynchronous mode: use callbacks to fetch the next page.
 */
client.search(params, function (err, data) {
    console.log('success:', JSON.stringify(data, null, 2));

    if (data.nextToken && data.nextToken.length) {
        // Encode and decode the token the same way as in synchronous mode.
        var nextToken = data.nextToken.toString("base64");
        var token = Buffer.from(nextToken, "base64");

        params.searchQuery.token = token;
        client.search(params, function (err, data) {
            console.log('token success:', JSON.stringify(data, null, 2));
        });
    }
});