Ao usar um índice de pesquisa para consultar dados, você pode utilizar um método de ordenação predefinido ou especificar um método de ordenação. As linhas que atendem às condições da consulta retornam na ordem predefinida ou especificada. Se a resposta incluir um grande número de linhas, localize os dados necessários configurando os parâmetros Limit e Offset ou usando tokens.
Cenários de uso
|
Categoria |
Método |
Recurso |
Cenário |
|
Ordenação |
Predefinir um método de ordenação ao criar um índice de pesquisa |
Por padrão, os dados em um índice de pesquisa são ordenados com base nas configurações de pré-ordenação especificadas pelo parâmetro IndexSort. Essas configurações determinam a ordem padrão de retorno das linhas que atendem às condições da consulta. |
|
|
Especificar um método de ordenação ao consultar dados |
O ScoreSort ordena os resultados da consulta com base na pontuação de relevância de palavras-chave do BM25. É adequado para cenários como pesquisa de texto completo. |
||
|
Use o PrimaryKeySort para ordenar os resultados da consulta com base no valor da chave primária. Este método é indicado para cenários em que você deseja ordenar dados pelos identificadores únicos. |
|||
|
Com o FieldSort, ordene os resultados da consulta com base nos valores de uma ou mais colunas. Mais indicado para cenários em que você deseja ordenar dados por propriedades como volume de vendas ou visualizações de página. Na maioria dos casos, o FieldSort é usado em setores como e-commerce, redes sociais e ativos de mídia. |
|||
|
O GeoDistanceSort permite ordenar os resultados da consulta por localização geográfica. Projetado para cenários em que você deseja ordenar dados pela distância de um local específico. Na maioria dos casos, o GeoDistanceSort é usado em setores como mapeamento e logística. Por exemplo, ordene restaurantes ao redor de um local com base na distância. |
|||
|
Paginação |
Especificar um método de paginação ao consultar dados |
Se o número de linhas na resposta for inferior a 100.000, use este método para ir diretamente a uma página. |
|
|
Com este recurso, os dados retornam página por página, e a paginação ocorre apenas para frente. Para retornar a uma página anterior, armazene em cache um token anterior e reutilize-o, pois os tokens permanecem válidos durante toda a consulta. |
Pré-ordenação do índice
Por padrão, os dados em um índice de pesquisa são ordenados com base nas configurações de pré-ordenação especificadas pelo parâmetro IndexSort. Ao usar um índice de pesquisa para consultar dados, essas configurações determinam a ordem padrão de retorno dos dados correspondentes.
Ao criar um índice de pesquisa, você pode especificar as configurações de pré-ordenação pelo parâmetro IndexSort. Se não especificar configurações de pré-ordenação, os dados no índice de pesquisa serão ordenados pelo valor da chave primária.
-
Você pode especificar PrimaryKeySort ou FieldSort como método de pré-ordenação para um índice de pesquisa. O PrimaryKeySort ordena dados pelo valor da chave primária, e o FieldSort ordena dados pelo valor do campo.
-
Índices de pesquisa que contêm campos Nested não são compatíveis com pré-ordenação do índice.
-
Para modificar as configurações do parâmetro IndexSort de um índice de pesquisa existente, modifique dinamicamente o esquema do índice de pesquisa. Para mais informações, consulte Modificar dinamicamente o esquema do índice de pesquisa.
Especificar um método de ordenação ao consultar dados
A ordenação pode ser ativada apenas para campos com enable_sort_and_agg definido como True.
Você pode especificar um método de ordenação para cada consulta. Consultas baseadas em índice de pesquisa são compatíveis com os seguintes métodos de ordenação. Também é possível especificar vários métodos com base em diferentes prioridades.
ScoreSort
O ScoreSort ordena os resultados da consulta com base na pontuação de relevância de palavras-chave do BM25. É adequado para cenários como pesquisa de texto completo.
Configure os parâmetros do ScoreSort para ordenar os dados correspondentes por pontuação de relevância de palavras-chave. Caso contrário, os dados serão ordenados com base nas configurações de pré-ordenação especificadas pelo parâmetro IndexSort.
sort = Sort(
sorters=[ScoreSort(sort_order=SortOrder.DESC)]
)
client.search(
'<TABLE_NAME>', '<SEARCH_INDEX_NAME>', SearchQuery(query, sort=sort, limit=100, get_total_count=True), ColumnsToGet(return_type=ColumnReturnType.ALL)
)
PrimaryKeySort
O PrimaryKeySort ordena os resultados da consulta com base no valor da chave primária.
sort = Sort(
sorters=[PrimaryKeySort(sort_order=SortOrder.DESC)]
)
client.search(
'<TABLE_NAME>', '<SEARCH_INDEX_NAME>', SearchQuery(query, sort=sort, limit=100, get_total_count=True), ColumnsToGet(return_type=ColumnReturnType.ALL)
) = PrimaryKeySort(sort_order=SortOrder.DESC)
FieldSort
O FieldSort ordena os resultados da consulta com base nos valores de uma ou mais colunas específicas.
Ordenar os resultados da consulta com base nos valores de uma única coluna
O FieldSort ordena os resultados da consulta com base nos valores de uma coluna especificada.
sort = Sort(
sorters=[FieldSort('a', SortOrder.ASC)]
)
client.search(
'<TABLE_NAME>', '<SEARCH_INDEX_NAME>', SearchQuery(query, sort=sort, limit=100, get_total_count=True), ColumnsToGet(return_type=ColumnReturnType.ALL)
)
Ordenar os resultados da consulta com base nos valores de múltiplas colunas
Você também pode ordenar os resultados da consulta com base nos valores de duas colunas em ordens específicas para determinar a ordem de retorno dos dados correspondentes.
sort = Sort(
sorters=[
FieldSort('a', SortOrder.ASC),
FieldSort('b', SortOrder.ASC)
]
)
client.search(
'<TABLE_NAME>', '<SEARCH_INDEX_NAME>', SearchQuery(query, sort=sort, limit=100, get_total_count=True), ColumnsToGet(return_type=ColumnReturnType.ALL)
)
GeoDistanceSort
O GeoDistanceSort ordena os resultados da consulta por localização geográfica.
sort = Sort(
sorters=[GeoDistanceSort('g', ['32.5,116.5', '32.0,116.0'], sort_order=SortOrder.DESC, sort_mode=SortMode.MAX)]
)
client.search(
'<TABLE_NAME>', '<SEARCH_INDEX_NAME>', SearchQuery(query, sort=sort, limit=100, get_total_count=True), ColumnsToGet(return_type=ColumnReturnType.ALL)
)
Especificar um método de paginação
Use limit e offset ou tokens para dividir os resultados da consulta em páginas.
Configurar os parâmetros limit e offset
Se o número total de linhas na resposta for inferior a 100.000, configure os parâmetros limit e offset para paginar as linhas. A soma dos valores dos parâmetros limit e offset não pode exceder 100.000. O valor máximo do parâmetro limit é 100.
Para saber como aumentar o valor máximo do parâmetro limit, consulte Como aumentar o valor do parâmetro limit para 1000 ao usar a operação Search do recurso de índice de pesquisa para consultar dados?
Se você não especificar valores para os parâmetros limit e offset, os valores padrão serão usados. O valor padrão do parâmetro limit é 10. O valor padrão do parâmetro offset é 0.
query = RangeQuery('k', 'key100', 'key500', include_lower=False, include_upper=False)
search_response = client.search(
'<TABLE_NAME>', '<SEARCH_INDEX_NAME>',
SearchQuery(query, offset=100, limit=100, get_total_count=True),
ColumnsToGet(return_type=ColumnReturnType.ALL)
)
print('request_id : %s' % search_response.request_id)
print('is_all_succeed : %s' % search_response.is_all_succeed)
print('total_count : %s' % search_response.total_count)
print('rows : %s' % search_response.rows)
Usar um token
Recomenda-se usar um token para paginação profunda, pois este método não tem limites de profundidade de paginação.
Se o Tablestore não conseguir ler todos os dados que atendem às condições da consulta, ele retorna next_token. Use next_token para continuar lendo os dados subsequentes.
Por padrão, ao usar um token, a paginação ocorre apenas para frente. Para retornar a uma página anterior, armazene em cache um token anterior e reutilize-o, pois os tokens permanecem válidos durante toda a consulta.
Ao usar um token, o método de ordenação permanece o mesmo da solicitação anterior. O Tablestore ordena os dados com base no campo IndexSort por padrão ou no método especificado. Não é possível especificar o método de ordenação ao usar um token. Também não é possível configurar o parâmetro offset ao usar um token. Os dados retornam página por página, o que pode resultar em consultas mais lentas.
Índices de pesquisa que contêm campos do tipo Nested não são compatíveis com IndexSort. Se você precisar de paginação e usar um índice de pesquisa com campos do tipo 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 retorna next_token quando apenas parte dos dados que atendem às condições da consulta é retornada.
query = MatchAllQuery()
all_rows = []
next_token = None
# first round
search_response = client.search('<TABLE_NAME>', '<SEARCH_INDEX_NAME>',
SearchQuery(query, next_token=next_token, limit=100, get_total_count=True),
columns_to_get=ColumnsToGet(['k', 't', 'g', 'ka', 'la'], ColumnReturnType.SPECIFIED))
all_rows.extend(search_response.rows)
# loop
while search_response.next_token:
search_response = client.search('<TABLE_NAME>', '<SEARCH_INDEX_NAME>',
SearchQuery(query, next_token=search_response.next_token, sort=None, limit=100, get_total_count=True),
columns_to_get=ColumnsToGet(['k', 't', 'g', 'ka', 'la'], ColumnReturnType.SPECIFIED))
all_rows.extend(search_response.rows)
print('Total rows:%d' % len(all_rows))
Perguntas frequentes
Referências
Ao usar um índice de pesquisa para consultar dados, você pode usar os seguintes métodos de consulta: consulta por termo, consulta por termos, consulta match all, consulta match, consulta match phrase, consulta por prefixo, consulta por intervalo, consulta wildcard, consulta geográfica, consulta booleana, consulta de vetor KNN, consulta aninhada e consulta exists. Você pode usar os métodos de consulta fornecidos pelo índice de pesquisa para consultar dados de múltiplas dimensões de acordo com seus requisitos de negócio.
Ordene ou pagine as linhas que atendem às condições da consulta usando os recursos de ordenação e paginação. Para mais informações, consulte Ordenação e paginação.
Use o recurso collapse (distinct) para recolher o conjunto de resultados com base em uma coluna específica. Dessa forma, os dados do tipo especificado aparecem apenas uma vez nos resultados da consulta. Saiba mais em Collapse (distinct).
Para analisar dados em uma tabela de dados, use o recurso de agregação da operação Search ou execute instruções SQL. Por exemplo, obtenha os valores mínimo e máximo, soma e número total de linhas. Para mais informações, consulte Agregação e Consulta SQL.
Para obter todas as linhas que atendem às condições da consulta sem ordenação, chame as operações ParallelScan e ComputeSplits para usar o recurso de varredura paralela. Consulte Varredura paralela.