A consulta de correspondência permite consultar dados em uma tabela com base em correspondências aproximadas. O Tablestore tokeniza os valores nas colunas TEXT e as palavras-chave usadas na consulta conforme o tipo de analisador especificado. Assim, o Tablestore executa a consulta com base nos tokens gerados. Para colunas que utilizam tokenização difusa, recomenda-se o uso da consulta de frase correspondente (match phrase query) para garantir alto desempenho.
Pré-requisitos
Instância OTSClient inicializada. Para mais informações, consulte Inicializar um cliente Tablestore.
Tabela de dados criada e preenchida. Para mais informações, consulte Crie uma tabela de dados e Gravar dados.
Índice de pesquisa criado para a tabela de dados. Para mais informações, consulte Crie um índice de pesquisa.
Parâmetros
|
Parâmetro |
Descrição |
|
field_name |
Nome da coluna a ser consultada. A consulta de correspondência aplica-se a colunas do tipo TEXT. |
|
text |
Palavra-chave usada para corresponder ao valor da coluna durante a consulta. Se a coluna consultada for do tipo TEXT, a palavra-chave será dividida em vários tokens conforme o analisador definido na criação do índice de pesquisa. Caso nenhum analisador seja especificado, o sistema aplica a tokenização por palavra única por padrão. Por exemplo, se a coluna alvo for TEXT, o analisador for configurado para tokenização por palavra única e a palavra-chave de busca for "this is", os resultados podem incluir "..., this is tablestore", "is this tablestore", "tablestore is cool", "this" e "is". |
|
query |
Tipo da consulta. Defina este parâmetro como MatchQuery. |
|
table_name |
Nome da tabela de dados. |
|
index_name |
Nome do índice de pesquisa. |
|
limit |
Número máximo de linhas retornadas pela consulta atual. Para obter apenas a contagem de linhas que atendem aos critérios, sem recuperar os dados específicos, defina o parâmetro limit como 0. |
|
operator |
Operador lógico. Por padrão, o sistema utiliza OR. Esse operador considera que uma linha atende à consulta quando o valor da coluna contém pelo menos o número mínimo de tokens correspondentes. Ao definir o parâmetro operator como AND, a linha só atenderá à condição se o valor da coluna contiver todos os tokens. |
|
minimum_should_match |
Quantidade mínima de tokens correspondentes que o valor da coluna deve conter. O sistema retorna uma linha somente se o valor da coluna consultada possuir pelo menos o número mínimo especificado de palavras-chave tokenizadas correspondentes. Nota
O parâmetro minimum_should_match exige o uso do operador lógico OR. |
|
get_total_count |
Define se o total de linhas correspondentes deve ser retornado. O valor padrão é false, indicando que a contagem total não será incluída na resposta. Habilitar essa opção (true) pode reduzir o desempenho da consulta. |
|
columns_to_get |
Determina quais colunas retornar para cada linha correspondente.
|
Exemplos
Os exemplos abaixo demonstram como consultar linhas em que o valor da coluna Col_Keyword corresponde aproximadamente a 'this is'.
-
Executar consulta de correspondência com Tablestore SDK for Python V5.2.1 ou posterior
Ao utilizar o Tablestore SDK for Python V5.2.1 ou posterior, a resposta padrão é um objeto SearchResponse. O código a seguir ilustra uma requisição de exemplo:
query = MatchQuery('Col_Keyword', 'this is') search_response = client.search( '<TABLE_NAME>', '<SEARCH_INDEX_NAME>', SearchQuery(query, 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) # # If deep paging is required, we recommend that you use the next_token parameter because this method has no limits on the paging depth. # 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(return_type=ColumnReturnType.ALL)) # 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, limit=100, get_total_count=True), # columns_to_get=ColumnsToGet(return_type=ColumnReturnType.ALL)) # all_rows.extend(search_response.rows) # print('Total rows:%s' % len(all_rows))Para obter resultados no formato Tuple, utilize o seguinte modelo de requisição:
query = MatchQuery('Col_Keyword', 'this is') rows, next_token, total_count, is_all_succeed, agg_results, group_by_results = client.search( '<TABLE_NAME>', '<SEARCH_INDEX_NAME>', SearchQuery(query, limit=100, get_total_count=True), ColumnsToGet(return_type=ColumnReturnType.ALL) ).v1_response() -
Executar consulta de correspondência com versões anteriores à 5.2.1 do Tablestore SDK for Python
Em versões do Tablestore SDK for Python anteriores à 5.2.1, o retorno padrão da consulta é do tipo TUPLE. Veja abaixo um exemplo de requisição:
query = MatchQuery('Col_Keyword', 'this is') rows, next_token, total_count, is_all_succeed = client.search( '<TABLE_NAME>', '<SEARCH_INDEX_NAME>', SearchQuery(query, limit=100, get_total_count=True), ColumnsToGet(return_type=ColumnReturnType.ALL) )
FAQ
Referências
-
O índice de pesquisa oferece diversos métodos de consulta, incluindo: consulta de termo, consulta de termos, consulta match all, consulta de correspondência, consulta de frase correspondente, consulta de prefixo, consulta de intervalo, consulta curinga, consulta geográfica, consulta booleana, consulta vetorial KNN, consulta aninhada e consulta de existência. Utilize esses métodos para buscar dados sob múltiplas dimensões, conforme a necessidade do seu negócio.
É possível ordenar ou paginar as linhas resultantes por meio dos recursos de classificação e paginação. Para detalhes, consulte Classificação e paginação.
O recurso de colapso (distinct) permite agrupar resultados com base em uma coluna específica, garantindo que cada tipo de dado apareça apenas uma vez na resposta. Saiba mais em Colapso (distinct).
Para análises estatísticas na tabela de dados, como soma, valores mínimos/máximos ou contagem total, utilize o recurso de agregação da operação Search ou execute instruções SQL. Consulte Agregação e Consulta SQL para mais informações.
Caso precise recuperar todas as linhas correspondentes sem ordenação, utilize a varredura paralela chamando as operações ParallelScan e ComputeSplits. Veja Varredura paralela para instruções detalhadas.