Use a consulta com curinga no Tablestore SDK for Go para corresponder a valores ou tokens por meio de asteriscos (*) e pontos de interrogação (?).
Pré-requisitos
Instale o Tablestore Go SDK e inicialize um cliente.
Descrição
A consulta com curinga usa um asterisco (*) para corresponder a zero ou mais caracteres e um ponto de interrogação (?) para corresponder a exatamente um caractere. Em campos do tipo Text, a consulta se aplica aos termos tokenizados. A correspondência diferencia maiúsculas de minúsculas, e a string de consulta pode conter até 32 caracteres.
func (client *tablestore.TableStoreClient) Search(request *tablestore.SearchRequest) (*tablestore.SearchResponse, error)
O exemplo a seguir consulta dados e retorna até 10 linhas, além do número total de linhas correspondentes.
tableName := "example_table"
indexName := "example_index"
query := &search.WildcardQuery{FieldName: "category", Value: "book-*"}
searchQuery := search.NewSearchQuery().
SetQuery(query).
SetLimit(10).
SetGetTotalCount(true)
response, err := client.Search(&tablestore.SearchRequest{
TableName: tableName,
IndexName: indexName,
SearchQuery: searchQuery,
ColumnsToGet: &tablestore.ColumnsToGet{
ReturnAllFromIndex: true,
},
})
if err != nil {
log.Fatal(err)
}
fmt.Println(response.TotalCount)
fmt.Println(response.Rows)
Parâmetros
Requisição de consulta
request é do tipo tablestore.SearchRequest e contém os seguintes parâmetros.
|
Nome |
Tipo |
Descrição |
|
TableName (obrigatório) |
string |
Nome da tabela de dados. |
|
IndexName (obrigatório) |
string |
Nome do índice de pesquisa. |
|
SearchQuery (obrigatório) |
search.SearchQuery |
Condição de consulta e configurações comuns de consulta. |
|
ColumnsToGet (opcional) |
*tablestore.ColumnsToGet |
Configuração das colunas de retorno. Se este parâmetro for omitido, apenas as colunas de chave primária serão retornadas. |
|
RoutingValues (opcional) |
[]*tablestore.PrimaryKey |
Valores de chave primária para campos de roteamento personalizado. Omita este parâmetro caso o roteamento personalizado não esteja configurado. |
|
TimeoutMs (opcional) |
*int32 |
Tempo limite da requisição em milissegundos. |
Configuração de consulta
Crie uma configuração de consulta chamando search.NewSearchQuery() e configure-a usando os métodos abaixo.
|
Nome |
Tipo |
Descrição |
|
SetQuery (obrigatório) |
search.Query |
Define a condição de consulta. |
|
SetOffset (opcional) |
int32 |
Especifique a posição inicial. Valor padrão: 0. Na paginação baseada em offset, a soma de Offset + Limit não pode exceder 100.000. |
|
SetLimit (opcional) |
int32 |
Determina o número máximo de linhas a retornar. Valor padrão: 10. Valor máximo: 100. O valor 0 não retorna nenhuma linha. |
|
SetHighlight (opcional) |
*search.Highlight |
Configure resumos e destaque para campos Text. Para mais informações, consulte Summary and highlighting. |
|
SetCollapse (opcional) |
*search.Collapse |
Agrupa resultados de consulta. Para mais informações, consulte Collapse query results. |
|
SetSort (opcional) |
*search.Sort |
Define a ordem de classificação dos resultados. Para mais informações, consulte Sort and paginate results. |
|
SetGetTotalCount (opcional) |
bool |
Indica se todas as linhas correspondentes devem ser contadas. Valor padrão: false. |
|
SetToken (opcional) |
[]byte |
Especifique o valor NextToken retornado pela resposta anterior. Este método limpa o Sort, pois o token já contém as condições de ordenação da página anterior. Não especifique Offset ao usar paginação baseada em token. |
|
SetSearchFilter (opcional) |
*search.SearchFilter |
Aplica um filtro pós-consulta. Para mais informações, consulte Use post-query filters. |
|
Aggregation (opcional) |
...search.Aggregation |
Configure agregações. Para mais informações, consulte Aggregation. |
|
GroupBy (opcional) |
...search.GroupBy |
Configure agrupamentos. Para mais informações, consulte Aggregation. |
Condição de consulta
A consulta é do tipo search.WildcardQuery e contém os seguintes parâmetros.
|
Nome |
Tipo |
Descrição |
|
FieldName (obrigatório) |
string |
Nome do campo de índice a consultar. |
|
Value (obrigatório) |
string |
String de consulta com curinga, que pode conter até 32 caracteres. |
Colunas a retornar
request.ColumnsToGet é do tipo tablestore.ColumnsToGet e contém os seguintes parâmetros.
|
Nome |
Tipo |
Descrição |
|
Columns (opcional) |
[]string |
Colunas de atributo a retornar. Este parâmetro só tem efeito quando ReturnAll e ReturnAllFromIndex são ambos false. |
|
ReturnAll (opcional) |
bool |
Indica se todas as colunas de atributo da tabela de dados devem ser retornadas. Valor padrão: false. |
|
ReturnAllFromIndex (opcional) |
bool |
Indica se todas as colunas de atributo indexadas devem ser retornadas. Valor padrão: false. Não defina este parâmetro e ReturnAll como true simultaneamente. |
Resposta
O método Search retorna um valor tablestore.SearchResponse. A tabela a seguir descreve os principais campos de negócio.
|
Nome |
Tipo |
Descrição |
|
TotalCount |
int64 |
Número total de linhas correspondentes. O valor depende de SetGetTotalCount. |
|
Rows |
[]*tablestore.Row |
Linhas retornadas pela consulta atual. A quantidade não excede o valor especificado por SetLimit. |
|
SearchHits |
[]*tablestore.SearchHit |
Resultados da pesquisa. Leia este campo ao usar destaque, inner hits aninhados ou pontuações de relevância. |
|
NextToken |
[]byte |
Token para a próxima página. Se o valor não estiver vazio, passe-o para a próxima consulta. |
|
IsAllSuccess |
bool |
Indica se todas as partições do índice foram consultadas. Se o valor for false, resultados parciais são retornados e TotalCount pode ser menor que o número real de linhas correspondentes. |
|
AggregationResults |
search.AggregationResults |
Resultados da agregação. |
|
GroupByResults |
search.GroupByResults |
Resultados do agrupamento. |
Exemplos
Melhorar o desempenho de consultas de substring
Para padrões de consulta como *word*, configure o campo Text com o analisador fuzzy ao criar o índice de pesquisa e use uma consulta match phrase para consultar o campo. Essa abordagem geralmente oferece melhor desempenho do que uma consulta com curinga para correspondência de substrings. Para regras de correspondência e limites, consulte Token-based wildcard queries.
O exemplo a seguir cria um índice de pesquisa que contém o campo file_name e configure o analisador fuzzy para esse campo.
analyzer := tablestore.Analyzer_Fuzzy
fieldSchema := &tablestore.FieldSchema{
FieldName: proto.String("file_name"),
FieldType: tablestore.FieldType_TEXT,
Index: proto.Bool(true),
Analyzer: &analyzer,
AnalyzerParameter: tablestore.FuzzyAnalyzerParameter{},
}
request := &tablestore.CreateSearchIndexRequest{
TableName: "example_table",
IndexName: "example_index",
IndexSchema: &tablestore.IndexSchema{
FieldSchemas: []*tablestore.FieldSchema{fieldSchema},
},
}
_, err := client.CreateSearchIndex(request)
if err != nil {
log.Fatal(err)
}
Após a sincronização dos dados do índice, use uma MatchPhraseQuery para consultar linhas nas quais o campo file_name contenha word em qualquer posição.
query := &search.MatchPhraseQuery{
FieldName: "file_name",
Text: "word",
}
searchQuery := search.NewSearchQuery().
SetQuery(query).
SetLimit(10)
response, err := client.Search(&tablestore.SearchRequest{
TableName: "example_table",
IndexName: "example_index",
SearchQuery: searchQuery,
ColumnsToGet: &tablestore.ColumnsToGet{
ReturnAllFromIndex: true,
},
})
if err != nil {
log.Fatal(err)
}
fmt.Println(response.Rows)
Excluir linhas que correspondem a um padrão com curinga
Para implementar o equivalente ao NOT LIKE do SQL, adicione uma WildcardQuery em BoolQuery.MustNotQueries.
wildcardQuery := &search.WildcardQuery{
FieldName: "category",
Value: "book-*",
}
query := &search.BoolQuery{
MustNotQueries: []search.Query{wildcardQuery},
}
searchQuery := search.NewSearchQuery().
SetQuery(query).
SetLimit(10)
response, err := client.Search(&tablestore.SearchRequest{
TableName: "example_table",
IndexName: "example_index",
SearchQuery: searchQuery,
ColumnsToGet: &tablestore.ColumnsToGet{
ReturnAllFromIndex: true,
},
})
if err != nil {
log.Fatal(err)
}
fmt.Println(response.Rows)