Use a consulta de correspondência (MatchQuery) para buscar dados em uma tabela com base em correspondências aproximadas. O Tablestore tokeniza os valores das colunas TEXT e as palavras-chave da consulta conforme o tipo de analisador especificado, permitindo que o sistema execute a busca com base nos tokens gerados. Para colunas com tokenização difusa, use a consulta de frase correspondente (match phrase query) para garantir melhor desempenho.
Pré-requisitos
Instância OTSClient inicializada. Para mais informações, consulte Inicializar uma instância OTSClient.
Tabela de dados criada e preenchida. Para mais detalhes, consulte Criar uma tabela de dados e Gravar dados.
Índice de busca criado para a tabela de dados. Consulte Criar índices de busca.
Parâmetros
|
Parâmetro |
Descrição |
|
TableName |
Nome da tabela de dados. |
|
IndexName |
Nome do índice de busca. |
|
Query |
Tipo da consulta. Defina como MatchQuery. |
|
FieldName |
Nome do campo para correspondência. É possível executar consultas de correspondência em colunas do tipo TEXT. |
|
Text |
Palavra-chave usada para corresponder aos valores da coluna na consulta. Se a coluna for do tipo TEXT, o sistema divide a palavra-chave em vários tokens conforme o analisador definido na criação do índice de busca. Sem essa definição, aplica-se a tokenização por palavra única por padrão. Por exemplo, se a coluna alvo for TEXT, o analisador for de 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". |
|
Operator |
Operador lógico. O padrão é OR: a linha atende à condição se o valor da coluna contiver a quantidade especificada de tokens correspondentes. Com Operator definido como AND, a linha só retorna se o valor da coluna contiver todos os tokens buscados. |
|
MinimumShouldMatch |
Quantidade mínima de tokens correspondentes exigida no valor da coluna. A linha aparece nos resultados apenas se o valor da coluna indicada em FieldName contiver pelo menos esse número mínimo de tokens. Nota
Use o parâmetro MinimumShouldMatch em conjunto com o operador lógico OR. |
|
Offset |
Posição inicial da consulta atual. |
|
Limit |
Número máximo de linhas retornadas pela consulta. Para obter apenas a contagem de linhas correspondentes sem recuperar os dados, defina Limit como 0. |
|
GetTotalCount |
Define se o total de linhas correspondentes deve ser retornado. Valor padrão: false. Habilitar essa opção (true) pode reduzir o desempenho da consulta. |
|
ColumnsToGet |
Controla quais colunas das linhas correspondentes retornam. Configure pelos parâmetros ReturnAll e Columns. Por padrão, ReturnAll é false e nem todas as colunas retornam. Nesse caso, use Columns para listar as colunas desejadas; caso contrário, apenas as colunas de chave primária retornam. Se ReturnAll for true, todas as colunas aparecem no resultado. |
Código de exemplo
O exemplo abaixo demonstra como consultar linhas cujo valor em Col_Keyword corresponda a 'hangzhou':
/**
* Query the rows whose value of Col_Keyword matches "hangzhou" in a table. Tablestore returns the total number of rows that meet the query conditions and part of the matched rows.
*/
func MatchQuery(client *tablestore.TableStoreClient, tableName string, indexName string) {
searchRequest := &tablestore.SearchRequest{}
searchRequest.SetTableName(tableName)
searchRequest.SetIndexName(indexName)
query := &search.MatchQuery{} // Set the query type to MatchQuery.
query.FieldName = "Col_Keyword" // Specify the name of the column that you want to query.
query.Text = "hangzhou" // Specify the keyword that is used to match the value of the column.
searchQuery := search.NewSearchQuery()
searchQuery.SetQuery(query)
searchQuery.SetGetTotalCount(true)
searchQuery.SetOffset(0) // Set the Offset parameter to 0.
searchQuery.SetLimit(20) // Set the Limit parameter to 20, which indicates a maximum of 20 rows can be returned.
searchRequest.SetSearchQuery(searchQuery)
searchResponse, err := client.Search(searchRequest)
if err != nil { // An error occurs.
fmt.Printf("%#v", err)
return
}
fmt.Println("IsAllSuccess: ", searchResponse.IsAllSuccess) // Check whether all rows that meet the query conditions are returned.
fmt.Println("TotalCount: ", searchResponse.TotalCount) // Display the total number of rows that meet the query conditions.
fmt.Println("RowCount: ", len(searchResponse.Rows)) // Display the total number of rows that are returned.
for _, row := range searchResponse.Rows {
jsonBody, err := json.Marshal(row)
if err != nil {
panic(err)
}
fmt.Println("Row: ", string(jsonBody)) // By default, if you do not specify the columnsToGet parameter, only the primary key columns are returned.
}
// Return all columns in the rows that meet the query conditions.
searchRequest.SetColumnsToGet(&tablestore.ColumnsToGet{
ReturnAll:true,
})
searchResponse, err = client.Search(searchRequest)
if err != nil {
fmt.Printf("%#v", err)
return
}
fmt.Println("IsAllSuccess: ", searchResponse.IsAllSuccess) // Check whether all rows that meet the query conditions are returned.
fmt.Println("TotalCount: ", searchResponse.TotalCount) // Display the total number of rows that meet the query conditions.
fmt.Println("RowCount: ", len(searchResponse.Rows))
for _, row := range searchResponse.Rows {
jsonBody, err := json.Marshal(row)
if err != nil {
panic(err)
}
fmt.Println("Row: ", string(jsonBody))
}
}
Perguntas frequentes
Referências
-
Ao consultar dados via índice de busca, você pode usar os seguintes métodos: consulta por termo, consulta por termos, consulta match all, consulta de correspondência, consulta de frase correspondente, consulta por prefixo, consulta por intervalo, consulta por curinga, consulta geográfica, consulta booleana, consulta vetorial KNN, consulta aninhada e consulta de existência. Escolha o método adequado às necessidades do seu negócio para explorar os dados sob múltiplas dimensões.
Os recursos de ordenação e paginação permitem organizar ou segmentar as linhas correspondentes. Saiba mais em Ordenação e Paginação.
Use o recurso de colapso (deduplicação) para agrupar resultados com base em uma coluna específica, fazendo com que cada valor distinto apareça apenas uma vez. Veja detalhes em Colapso (deduplicação).
Para analisar dados da tabela, utilize as agregações da operação Search ou execute instruções SQL. Essas abordagens fornecem métricas como valores mínimos e máximos, somatórios e contagem total de linhas. Consulte Agregação e Consulta SQL para mais informações.
Para recuperar todas as linhas correspondentes sem ordenação, utilize a varredura paralela por meio das operações ParallelScan e ComputeSplits. Para instruções completas, acesse Realizar varredura paralela.