Menu Docs

Página inicial do DocsIniciar e gerenciar o MongoDBMongoDB Atlas

Como indexar campos para o Vector Search

Nesta página

  • Considerações
  • Sintaxe
  • Sobre o tipo vector
  • Sobre o tipo filter
  • Campos de índice do Atlas Vector Search
  • Crie e gerencie índices do Atlas Vector Search
  • Status do nó

Você pode utilizar o tipo vectorSearch para indexar campo para executar query do $vectorSearch . Você pode definir o índice para as incorporações vetoriais que deseja fazer a query e os valores booleanos, numéricos ou de cadeia de caracteres que deseja usar para pré-filtrar seus dados. É útil filtrar os dados para restringir o escopo da pesquisa semântica e garantir que determinadas incorporações vetoriais não sejam consideradas para comparação, como em um ambiente de vários inquilinos.

Você pode utilizar a interface de usuário do Atlas e a API de Administração do Atlas para criar seu índice do Atlas Vector Search.

Observação

Você não pode usar o operador knnBeta obsoleto para consultar campos indexados usando a definição de índice do tipo vectorSearch .

Você não pode indexar campos dentro de arrays de documentos ou campos dentro de arrays de objetos em uma definição de índice do tipo vectorSearch . Você pode indexar campos dentro de documentos usando a notação de ponto.

A seguinte sintaxe define o tipo de índice vectorSearch :

1{
2 "fields":[
3 {
4 "type": "vector",
5 "path": "<field-to-index>",
6 "numDimensions": <number-of-dimensions>,
7 "similarity": "euclidean | cosine | dotProduct"
8 },
9 {
10 "type": "filter",
11 "path": "<field-to-index>"
12 },
13 ...
14 ]
15}

O campo vetorial deve conter uma array de números do tipo de dados BSON double para consulta usando o estágio de pipeline $vectorSearch . Você deve indexar o campo vetorial como o tipo vector dentro da array fields .

A seguinte sintaxe define o tipo de campo vector :

1{
2 "fields":[
3 {
4 "type": "vector",
5 "path": <field-to-index>,
6 "numDimensions": <number-of-dimensions>,
7 "similarity": "euclidean | cosine | dotProduct"
8 },
9 ...
10 ]
11}

Opcionalmente, você pode indexar valores booleanos, numéricos e de string para pré-filtrar seus dados. É útil filtrar os dados para restringir o escopo da pesquisa semântica e garantir que nem todos os vetores sejam considerados para comparação. Você deve indexar seus campos booleanos, numéricos e de cadeia de caracteres usando o tipo filter dentro da array fields .

A seguinte sintaxe define o tipo de campo filter :

1{
2 "fields":[
3 {
4 "type": "vector",
5 ...
6 },
7 {
8 "type": "filter",
9 "path": "<field-to-index>"
10 },
11 ...
12 ]
13}

Observação

A pré-filtragem de seus dados não afeta a pontuação que o Atlas Vector Search retorna usando $vectorSearchScore para $vectorSearch consultas.

A definição do índice do Atlas Vector Search usa os seguintes campos:

Opção
Tipo
necessidade
Propósito
fields
matriz de documentos
Obrigatório
Campos de vetor e filtro para indexar, um por documento. Pelo menos um documento deve conter a definição de campo para o campo de vetor. Opcionalmente, você também pode indexar campos de número, booleanos e strings, um por documento, para pré-filtrar os dados.
fields.type
string
Obrigatório

Tipo de campo a ser usado para indexar campos para $vectorSearch. Você pode especificar um dos seguintes valores:

  • vector - para campos que contêm incorporações vetoriais.

  • filter - para campos que contêm valores booleanos, numéricos ou de string.

fields.path
string
Obrigatório

Nome do campo a ser indexado. Para campos aninhados, utilize notação de ponto para especificar o caminho para campos incorporados. Você não pode indexar nomes de campos com dois pontos consecutivos (.) e nomes de campos que terminam com pontos (.). Por exemplo, o Atlas Vector Search não suporta a indexação dos seguintes nomes de campo:

foo..bar
O nome do campo tem dois pontos consecutivos.
foo_bar.
O nome do campo termina com um ponto.
fields.numDimensions
int
Obrigatório
Número de dimensões vetoriais que o Atlas Vector Search impõe no momento do índice e no momento da query. Você deve especificar um valor menor ou igual a 4096. Você pode definir este campo somente para campos do tipo vector .
fields.similarity
string
Obrigatório

Função de similaridade vetorial a ser usada para procurar os K- vizinhos mais próximos. Você pode definir este campo somente para campos do tipo vector . O valor inclui:

  • euclidean - mede a distância entre as extremidades dos vetores. Esse valor permite medir a similaridade com base na variação de dimensões. Para saber mais, ver Euclidean.

  • cosine - mede a similaridade com base no ângulo entre os vetores. Esse valor permite que você meça a similaridade que não é dimensionada pela magnitude. Você não pode utilizar vetores de magnitude zero com cosine. Para medir a similaridade do cosseno, recomendamos normalizar seus vetores e usar dotProduct . Para saber mais, consulte Cosseno.

  • dotProduct - medidas semelhantes a cosine, mas leva em conta a magnitude do vetor. Esse valor permite medir com eficiência a similaridade com base no ângulo e na magnitude. Para usar dotProduct, você deve normalizar o vetor para o comprimento unitário no momento do índice e no momento da query. Para saber mais, consulte Produto pontual.

Observação

Se você normalizar a magnitude, cosine e dotProduct são quase idênticos na medição de similaridade.

Você pode criar e gerenciar índices do Atlas Vector Search a partir da UI do Atlas e da API de administração do Atlas. Para saber mais, consulte:

Quando você cria o Atlas Vector Search, a coluna Status mostra o estado atual do índice no nó primário do cluster. Clique no link View status details abaixo do status para visualizar o estado do índice em todos os nós do cluster.

Quando a coluna StatusActive, o índice está pronto para utilizar. Em outros estados, queries em relação ao índice podem retornar resultados incompletos.

Status
Descrição
Não iniciado
Atlas ainda não começou a construir o índice.
Sincronização inicial

O Atlas está construindo o índice ou reconstruindo o índice após uma edição. Quando o índice está neste estado:

  • Para um novo índice, o Atlas Vector Search não atende às query até que a criação do índice esteja concluída.

  • Para um índice existente, você pode continuar usando o índice antigo para queries novas e existentes até que a recriação do índice seja concluída.

Ativo
O índice está pronto para uso.
Recuperando
A denúncia encontrou um erro. Esse estado geralmente ocorre quando o ponto de replicação atual não está mais disponível no oplog mongod . Você ainda pode fazer query no índice existente até que ele atualize e seu status mude para Active. Use o erro na janela modal View status details para solucionar o problema. Para saber mais, consulte Corrigir problemas do Atlas Search.
Falhou
O Atlas não conseguiu criar o índice. Use o erro na janela modal View status details para solucionar o problema. Para saber mais, consulte Corrigir problemas do Atlas Search.
Exclusão em Andamento
O Atlas está excluindo o índice dos nós de cluster.

Enquanto o Atlas constrói o índice e após a conclusão da construção, a coluna Documents mostra a porcentagem e o número de documentos indexados. A coluna também mostra o número total de documentos na coleção.

← Crie e gerencie índices do Atlas Vector Search