Todos os produtos
Search
Central de documentação

Tablestore:Vector search

Última atualização: Jul 03, 2026

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

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

Como otimizar o desempenho do AISearch

Referências