Todos os produtos
Search
Central de documentação

MaxCompute:VECTOR_SEARCH

Última atualização: Jul 13, 2026

A função VECTOR_SEARCH executa buscas de similaridade vetorial para localizar vizinhos mais próximos aproximados em grande escala.

Limitações

A função VECTOR_SEARCH exige que a tabela de entrada seja uma tabela Delta.

Sintaxe

VECTOR_SEARCH(
  { TABLE base_table | (base_table_query) },      -- The table containing the embedding vectors to search against.
  column_to_search,                               -- The column in the base table that contains the embedding vectors.
  { TABLE query_table | (query_table_query) },    -- The table providing the query embedding vectors.
  query_column_to_search,                         -- The column in the query table that contains the query embedding vectors.
  top_k                                           -- The number of nearest neighbors to return.
  [, distance_type]                               -- The metric for calculating distance.
  [, options]                                     -- A JSON string containing other configurable parameters.
)

Parâmetros

  • base_table | (base_table_query): Obrigatório. Tabela base que contém os vetores de embedding usados como referência na busca.

  • column_to_search: Obrigatório. Nome da coluna na tabela base onde estão armazenados os vetores de embedding.

  • query_table | (query_table_query): Obrigatório. Tabela que fornece os vetores de embedding da consulta.

  • query_column_to_search: Obrigatório. Nome da coluna na tabela de consulta que contém os vetores de embedding.

  • top_k: Obrigatório. Quantidade de vizinhos mais próximos a serem retornados. Deve ser um número inteiro positivo (≥ 1).

  • distance_type: Opcional. Define a métrica usada para calcular a distância entre dois vetores. Os seguintes tipos são suportados:

    • cosine: Calcula a similaridade do cosseno entre dois vetores. Comumente utilizada em cenários com vetores de características de texto ou imagem, nos quais a direção do vetor é relevante.

    • euclidean (Padrão): Mede a distância euclidiana, correspondente à distância em linha reta entre dois vetores no espaço.

    • dot_product: Calcula o produto escalar. Indicada para vetores normalizados, em que valores maiores representam maior similaridade.

  • options: Opcional. String formatada em JSON com parâmetros adicionais de configuração. Exemplo:

    • use_brute_force: Valor booleano em JSON que indica se a busca por força bruta deve ser usada, ignorando qualquer índice vetorial disponível. Exemplo: '{"use_brute_force":true}'. O valor padrão é false. Caso você defina use_brute_force=false e não haja índice vetorial disponível, o sistema adota automaticamente a busca por força bruta.

Valores de retorno

Para cada linha nos dados de consulta, a função retorna múltiplas linhas da tabela base que atendem aos critérios de busca. A quantidade de linhas retornadas por linha de consulta corresponde ao valor definido em top_k. A ordem de saída não é garantida.

  • query: STRUCT contendo todas as colunas selecionadas dos dados de consulta. Esta coluna aparece na saída apenas ao usar a sintaxe de busca em lote e é omitida em buscas de vetor único.

  • base: STRUCT com todas as colunas da base_table ou com o subconjunto de colunas selecionado na base_table_query.

  • distance: Valor DOUBLE que representa a distância entre os dados da base e os dados da consulta.

Exemplos

Preparação dos dados

-- Enable the VECTOR data type.
set odps.sql.type.vector.enable=true;
set odps.sql.type.system.odps2=true;

-- Create a base table for nearest neighbor search and insert data.
CREATE OR REPLACE TABLE base_table
 (
   id STRING,
   my_embedding VECTOR(FLOAT,2)
 )
 TBLPROPERTIES (
  "table.format.version"="2"
 );

INSERT into base_table (id, my_embedding)
 VALUES('dog', CAST(array(1.0, 2.0) AS VECTOR(FLOAT,2))),
 ('wolf', CAST(array(2.0, 4.0) AS VECTOR(FLOAT,2))),
 ('snake', CAST(array(-2.0, 3.0) AS VECTOR(FLOAT,2))),
 ('lion', CAST(array(2.0, -2.5) AS VECTOR(FLOAT,2))),
 ('tiger', CAST(array(3.0, -2.0) AS VECTOR(FLOAT,2))),
 ('otter', CAST(array(-3.0, -1.0) AS VECTOR(FLOAT,2))),
 ('whale', CAST(array(-5.0, -1.0) AS VECTOR(FLOAT,2)));

-- Create a query table for the search vectors and insert data.
CREATE OR REPLACE TABLE query_table
(
  query_id STRING,
  embedding VECTOR(FLOAT,2)
)TBLPROPERTIES (
  "table.format.version"="2"
 );
 
INSERT INTO query_table (query_id, embedding)
VALUES('dog', CAST(array(1.0, 2.0) AS VECTOR(FLOAT,2))),
('cat', CAST(array(1.0, -1.0) AS VECTOR(FLOAT,2)));

Neste exemplo, são identificados os dois vizinhos mais próximos na coluna my_embedding da base_table para cada vetor presente na coluna embedding da query_table.

SELECT *
FROM
  VECTOR_SEARCH(
    TABLE base_table,
    my_embedding,
    (SELECT query_id, embedding FROM query_table),
    embedding,
    2);

-- Returns:
+----------+-----------+----+--------------+------------+
| query_id | embedding | id | my_embedding | distance   |
+----------+-----------+----+--------------+------------+
| dog      | [1, 2]    | dog | [1, 2]       | 0.0        |
| dog      | [1, 2]    | wolf | [2, 4]       | 5.0        |
| cat      | [1, -1]   | lion | [2, -2.5]    | 3.25       |
| cat      | [1, -1]   | tiger | [3, -2]      | 5.0        |
+----------+-----------+----+--------------+------------+