A KnnVectorQuery executa buscas de vizinhos mais próximos aproximados (ANN) ao comparar um vetor numérico com grandes conjuntos de dados para identificar os itens mais semelhantes.
Pré-requisitos
Crie um índice de busca para a tabela de dados e especifique um campo vetorial.
Notas de uso
Instale a versão mais recente do Tablestore SDK for Go. Para mais informações, consulte Instalar o Tablestore SDK for Go.
Há limites para o número de tipos de campos vetoriais, dimensões e outras propriedades. Para mais detalhes, veja Limites do índice de busca.
O índice de busca é particionado no servidor. Cada partição retorna seus próprios TopK vizinhos mais próximos, e o nó cliente agrega os resultados posteriormente. Assim, ao usar um token para paginar todos os dados, o total de linhas retornadas depende do número de partições do servidor.
Parâmetros
|
Parâmetro |
Obrigatório |
Descrição |
|
FieldName |
Sim |
Nome do campo vetorial. |
|
TopK |
Sim |
Número de vizinhos mais próximos a retornar. A consulta devolve os K principais resultados mais semelhantes ao vetor de consulta. Para obter informações sobre o valor máximo de TopK, consulte Limites do índice de busca. Importante
Um valor K maior melhora a taxa de recall, mas aumenta a latência e os custos da consulta. |
|
Float32QueryVector |
Sim |
Vetor de consulta para comparação de similaridade. O tipo de dado é float32. |
|
MinScore |
Não |
Limiar mínimo de pontuação. O sistema retorna apenas linhas com pontuação superior a este valor. O valor deve ser maior ou igual a 0. Valor padrão: 0. |
|
Filter |
Não |
Filtro da consulta. Especifique uma combinação de condições de consulta não-KNN para filtrar os resultados. |
Exemplos
O exemplo a seguir recupera os 10 vizinhos mais próximos de um determinado vetor, filtra resultados com pontuação superior a 0,1 e valor col_keyword igual a "hangzhou".
func query(client *tablestore.TableStoreClient) {
searchQuery := search.NewSearchQuery()
searchQuery.Query = &search.KnnVectorQuery{
FieldName: "col_vector",
TopK: proto.Int32(10),
MinScore: proto.Float32(0.1),
Float32QueryVector: []float32{-1.4, 1, 1, 1.2},
Filter: &search.BoolQuery{
ShouldQueries: []search.Query{
&search.TermQuery{
FieldName: "col_keyword",
Term: "hangzhou",
},
},
},
}
searchQuery.Sort = &search.Sort{
Sorters: []search.Sorter{
search.NewScoreSort(), // Sort by score.
},
}
searchRequest := &tablestore.SearchRequest{
SearchQuery: searchQuery,
TableName: "<TABLE_NAME>",
IndexName: "<SEARCH_INDEX_NAME>",
ColumnsToGet: &tablestore.ColumnsToGet{Columns: []string{
"col_keyword",
"col_long",
}},
}
if resp, err := client.Search(searchRequest); err != nil {
fmt.Println("float32 vector query failed: ", err)
} else {
for _, hit := range resp.SearchHits {
fmt.Println("score:", *hit.Score)
jsonBody, err := json.Marshal(hit.Row)
if err != nil {
panic(err)
}
fmt.Println("row: ", string(jsonBody))
}
}
}
FAQ
Referências
-
Ao consultar dados com um índice de busca, utilize os seguintes métodos: consulta de termo, consulta de termos, consulta match all, consulta match, consulta match phrase, consulta de prefixo, consulta de intervalo, consulta curinga, consulta geográfica, consulta booleana, consulta vetorial KNN, consulta aninhada e consulta exists. Use esses métodos fornecidos pelo índice de busca para consultar dados em várias dimensões conforme as necessidades do seu negócio.
Ordene ou pagine as linhas que atendem às condições de consulta usando os recursos de classificação e paginação. Para mais informações, consulte Classificação e paginação.
Use o recurso de colapso (distinto) para agrupar 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. Para mais detalhes, consulte Colapso (deduplicação).
Para analisar dados em uma tabela, use o recurso de agregação da operação Search ou execute instruções SQL. Por exemplo, obtenha valores mínimos e máximos, soma e número total de linhas. Para mais informações, consulte Agregação e Consulta SQL.
Caso precise obter todas as linhas que atendem às condições de consulta sem ordená-las, chame as operações ParallelScan e ComputeSplits para usar o recurso de varredura paralela. Para mais detalhes, consulte Realizar uma varredura paralela.