Todos os produtos
Search
Central de documentação

Tablestore:Busca vetorial

Última atualização: Jul 03, 2026

A busca vetorial do Tablestore (KnnVectorQuery) executa consultas de vizinho mais próximo aproximado com vetores numéricos para localizar os itens mais semelhantes em conjuntos de dados de grande escala. Os casos de uso comuns incluem geração aumentada por recuperação (RAG), sistemas de recomendação, detecção de similaridade, processamento de linguagem natural e busca semântica.

Cenários

A busca vetorial aplica-se a sistemas de recomendação, recuperação de imagens e vídeos, processamento de linguagem natural e busca semântica.

  • Geração aumentada por recuperação (RAG)

    O RAG é um framework de IA que combina recuperação com Large Language Models (LLMs) para melhorar a precisão das saídas dos LLMs, especialmente para dados privados ou profissionais. Esse framework é amplamente utilizado em cenários de base de conhecimento.

  • Sistema de recomendação

    Em plataformas de e-commerce, redes sociais e streaming, comportamentos do usuário, preferências e características de conteúdo são codificados em vetores. A busca vetorial encontra produtos, artigos ou vídeos correspondentes, permitindo recomendações personalizadas que aumentam a satisfação e a retenção dos usuários.

  • Detecção de similaridade (imagens, vídeos e voz)

    No reconhecimento de imagens, vídeos, voz, impressão vocal e facial, dados não estruturados são convertidos em representações vetoriais. A busca vetorial localiza os alvos mais semelhantes. Por exemplo, quando um usuário faz upload de uma imagem em uma plataforma de e-commerce, o sistema encontra imagens de produtos com estilos, cores ou padrões similares.

  • Processamento de linguagem natural e busca semântica

    No processamento de linguagem natural (NLP), o texto é convertido em representações vetoriais, como embeddings Word2Vec ou BERT. A busca vetorial correlaciona a semântica da consulta para encontrar os documentos, notícias ou pares de perguntas e respostas mais relevantes, melhorando a relevância dos resultados de busca e a experiência do usuário.

  • Grafo de conhecimento e chat de IA

    Nós e relacionamentos de grafos de conhecimento podem ser representados como vetores. A busca vetorial acelera a vinculação de entidades, a inferência de relacionamentos e os tempos de resposta do chat de IA, permitindo respostas mais precisas para perguntas complexas.

Principais vantagens

Baixo custo

O mecanismo principal utiliza a tecnologia DiskAnn otimizada. Diferentemente do algoritmo Hierarchical Navigable Small World (HNSW), o DiskAnn não carrega todos os dados de índice na memória. Ele atinge uma taxa de recall e desempenho comparáveis ao HNSW usando menos de 10% da memória, o que reduz significativamente os custos em comparação com sistemas similares.

Facilidade de uso

  • A busca vetorial é um sub-recurso serverless do índice de busca. Não há necessidade de construção ou implantação de sistema. Para começar, crie uma instância no console do Tablestore.

  • Este recurso suporta o método de faturamento pagamento conforme o uso, sem necessidade de gerenciamento de nível de uso ou scale-out manual. O sistema faz dimensionamento horizontal tanto para armazenamento quanto para computação. A busca vetorial suporta até centenas de bilhões de entradas de dados, enquanto a busca não vetorial suporta até dez trilhões de entradas.

  • Durante uma busca vetorial, o mecanismo interno usa um otimizador de consultas para selecionar automaticamente o melhor algoritmo e caminho de execução. É possível obter alto recall e desempenho sem ajustes extensivos de parâmetros, o que diminui a barreira de entrada e encurta o ciclo de desenvolvimento.

  • A busca vetorial está acessível via SQL, SDKs para várias linguagens como Java, Go, Python e Node.js, e frameworks open source como LangChain, LangChain4J e LlamaIndex.

Visão geral das funções

Uma KnnVectorQuery encontra os itens de dados mais semelhantes em um conjunto de dados de grande escala executando uma consulta de vizinho mais próximo aproximado em vetores numéricos.

A busca vetorial herda todos os recursos de um índice de busca. Como serviço pronto para uso e com pagamento conforme o uso, não requer implantação de sistema. A construção de índice baseada em stream permite consultar dados quase em tempo real após a gravação. Também suporta adições, atualizações e exclusões de alto throughput, com desempenho de consulta comparável a sistemas baseados em HNSW.

Para usar a KnnVectorQuery, especifique o vetor de consulta, o campo vetorial a ser pesquisado e o número de vizinhos mais próximos (TopK) a serem recuperados. A consulta retorna os vetores TopK mais semelhantes ao vetor de consulta. Você pode combiná-la com outros recursos de busca não vetorial para filtrar resultados conforme necessário.

Descrição do campo vetorial

Antes de usar a KnnVectorQuery, configure um campo vetorial ao criar um índice de busca. Especifique as dimensões do vetor, o tipo de dados e o algoritmo de medida de distância.

O campo correspondente na tabela de dados deve usar o tipo de dados String, e o índice de busca deve usar uma string de array Float32. Para detalhes sobre a configuração do campo vetorial, consulte a tabela a seguir.

Item de configuração

Descrição

dimension

As dimensões do vetor. A dimensão máxima suportada é 4096. O valor deve corresponder à dimensão dos vetores produzidos pelo sistema de embedding upstream.

O comprimento do array do campo vetorial deve ser igual ao parâmetro de dimensão configurado. Por exemplo, se o valor do campo vetorial for a string [1, 5,1, 4,7, 0,08], a dimensão deste campo é 4.

Nota

Apenas vetores densos são suportados. A dimensão do campo vetorial deve corresponder à dimensão definida no schema quando o índice foi criado. Uma incompatibilidade causa falha na construção do índice para essa linha.

dataType

O tipo de dados do vetor. Apenas Float32 é suportado. Float32 não suporta valores extremos como NaN e Infinite.

O tipo de dados deve corresponder ao tipo de dados do vetor produzido pelo sistema de embedding upstream.

Nota

Para usar vetores de outros tipos de dados, envie um ticket para entrar em contato conosco.

metricType

O algoritmo usado para medir a distância entre vetores. Valores válidos: euclidean, cosine e dot_product.

O algoritmo de medida de distância deve corresponder ao algoritmo recomendado pelo sistema de embedding upstream. Para mais informações, consulte Algoritmos de medida de distância.

Nota

Modelos ou versões diferentes de um sistema de embedding produzem vetores com propriedades distintas, incluindo dimensão, tipo de dados e algoritmo de medida de distância. As propriedades do campo vetorial no sistema de busca vetorial (dimensão, tipo de dados e algoritmo de medida de distância) devem corresponder às propriedades dos vetores produzidos pelo sistema de embedding. Para mais informações sobre como gerar vetores, consulte Duas maneiras de gerar vetores.

Algoritmos de medida de distância

A busca vetorial suporta três algoritmos de medida de distância: euclidean, cosine e dot_product. Uma pontuação maior indica maior similaridade entre dois vetores.

MetricType

Fórmula de pontuação

Desempenho

Descrição

Distância euclidiana

(euclidean)

image

Alto

A distância euclidiana mede a distância em linha reta entre dois vetores em um espaço multidimensional. Para melhor desempenho, a implementação do Tablestore omite o cálculo final da raiz quadrada. Uma pontuação maior indica maior similaridade.

Produto escalar

(dot_product)

image

Mais alto

O produto escalar multiplica as coordenadas correspondentes de dois vetores de mesma dimensão e soma os resultados. Uma pontuação maior indica maior similaridade.

Importante

Normalize vetores Float32 antes de gravá-los em uma tabela, por exemplo, usando a norma L2. Sem normalização, podem ocorrer problemas como resultados de consulta ruins, construção lenta de índice vetorial e baixo desempenho de consulta. Para um exemplo de normalização de vetores, consulte Apêndice 2: Exemplo de normalização de vetores.

Similaridade de cosseno

(cosine)

image

Baixo

Mede o cosseno do ângulo entre dois vetores. Uma pontuação maior indica maior similaridade. A similaridade de cosseno é comumente usada para dados de texto.

Como a divisão por zero é indefinida, a similaridade de cosseno não pode ser calculada se a soma dos quadrados de um vetor Float32 for 0.

Importante

O cálculo da similaridade de cosseno é complexo. Recomendamos normalizar os vetores antes de gravar dados na tabela e depois usar dot_product como algoritmo de medida de distância. Para um exemplo de normalização de vetores, consulte Apêndice 2: Exemplo de normalização de vetores.

Observações

Observe os seguintes pontos ao usar a busca vetorial:

  • Existem limites para o número de tipos de campos vetoriais, dimensões e outras propriedades. Para mais informações, consulte Limites do índice de busca.

  • O índice de busca é particionado no lado do servidor. Cada partição retorna seu próprio TopK de vizinhos mais próximos, e os resultados são agregados no nó cliente. Portanto, se um token for usado para paginar todos os dados, o número total de linhas retornadas dependerá do número de partições no lado do servidor.

  • Atualmente, o recurso de busca vetorial está disponível nas seguintes regiões: China (Hangzhou), China (Shanghai), China (Qingdao), China (Pequim), China (Zhangjiakou), China (Ulanqab), China (Shenzhen), China (Guangzhou), China (Chengdu), China (Hong Kong), Japão (Tóquio), Singapura, Malásia (Kuala Lumpur), Indonésia (Jacarta), Filipinas (Manila), Tailândia (Bangkok), Alemanha (Frankfurt), Reino Unido (Londres), EUA (Virgínia), EUA (Vale do Silício), Arábia Saudita (Riad - Região Parceira).

Procedimento

  1. Gere vetores.

    Use modelos open source para converter dados no Tablestore em vetores e armazená-los.

  2. Grave dados vetoriais no Tablestore.

  3. Ao criar um índice de busca, configure o campo vetorial.

    Configure o tipo, as dimensões e o algoritmo de medida de distância do campo vetorial.

  4. Use a busca vetorial para consultar dados.

Faturamento

Durante a prévia pública, você não será cobrado por itens faturáveis específicos do recurso de consulta vetorial KNN. Outros itens faturáveis serão cobrados com base nas regras de faturamento existentes.

Ao usar um índice de busca para consultar dados, você é cobrado pelo throughput de leitura consumido. Para mais informações, consulte Itens faturáveis de índices de busca.

Apêndice 1: Uso com BoolQuery

KnnVectorQuery e BoolQuery podem ser combinados de diferentes maneiras. Os dois exemplos a seguir assumem um cenário onde um filtro corresponde a uma pequena quantidade de dados.

Suponha que uma tabela contenha 100 milhões de imagens. Um usuário tem 50.000 imagens no total, mas apenas 50 foram adicionadas nos últimos 7 dias. O usuário deseja encontrar as 10 imagens mais semelhantes dentre as adicionadas nos últimos 7 dias usando busca por imagem. A tabela a seguir mostra como esses dois métodos de combinação diferem.

Uso combinado

Diagrama da condição de consulta

Descrição

Usar BoolQuery dentro do filtro da KnnVectorQuery

image

A KnnVectorQuery atinge as linhas que satisfazem a condição BoolQuery e retorna as TopK linhas mais semelhantes. A resposta do SearchRequest retorna as primeiras Size linhas dos resultados TopK.

Neste exemplo, a KnnVectorQuery primeiro usa o filtro para selecionar todas as 50 imagens pertencentes ao usuário "a" dos últimos 7 dias, depois encontra as 10 imagens mais semelhantes dentre essas 50 e as retorna.

Usar KnnVectorQuery dentro da BoolQuery

image

Cada subconsulta na BoolQuery é executada primeiro, e então a interseção de todos os resultados das subconsultas é calculada.

Neste exemplo, a KnnVectorQuery retorna as 500 imagens mais semelhantes dentre os 100 milhões de imagens na tabela e, em seguida, encontra sequencialmente as 10 imagens do usuário "a" dos últimos 7 dias. No entanto, as 500 principais imagens podem não incluir todas as 50 imagens do usuário "a" dos últimos 7 dias. Portanto, esse método de consulta pode não encontrar as 10 imagens mais semelhantes dos últimos 7 dias e pode até não retornar nenhum dado.

Apêndice 2: Exemplo de normalização de vetores

O código a seguir normaliza um vetor:

  public static float[] l2normalize(float[] v, boolean throwOnZero) {
    double squareSum = 0.0f;
    int dim = v.length;
    for (float x : v) {
      squareSum += x * x;
    }
    if (squareSum == 0) {
      if (throwOnZero) {
        throw new IllegalArgumentException("can't normalize a zero-length vector");
      } else {
        return v;
      }
    }
    double length = Math.sqrt(squareSum);
    for (int i = 0; i < dim; i++) {
      v[i] /= length;
    }
    return v;
  }