Menu Docs
Página inicial do Docs
/
MongoDB Atlas
/

Como indexar campos para pesquisa vetorial

Nesta página

  • Considerações
  • Clientes aceitos
  • Sintaxe
  • Campos do índice do Atlas Vector Search
  • Sobre o tipo vector
  • Sobre o tipo filter
  • Crie um índice do Atlas Vector Search
  • Pré-requisitos
  • Acesso necessário
  • Limitações do índice
  • Procedimento
  • Exibir um índice do Atlas Vector Search
  • Acesso necessário
  • Procedimento
  • Editar um índice do Atlas Vector Search
  • Acesso necessário
  • Procedimento
  • Excluir um índice do Atlas Vector Search
  • Acesso necessário
  • Procedimento
  • Status do índice

Você pode usar o tipo vectorSearch para indexar campos para executar queries $vectorSearch. Você pode definir o índice para as incorporações vetoriais nas quais deseja consultar e os valores booleanos, de data, objectId, numéricos, de string ou UUID 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 multilocatário.

Você pode usar a IU do Atlas, a Administration API do Atlas, o Atlas CLI, mongosh ou um driver do MongoDB compatível para criar seu índice do Atlas Vector Search.

Observação

Não é possível usar o operador knnBeta obsoleto para fazer query nos campos indexados usando a definição de índice do tipo vectorSearch.

Em uma definição de índice do tipo vectorSearch , você pode indexar arrays com apenas um único elemento. Você não pode indexar campos dentro de arrays de documentos ou campos dentro de arrays de objetos. Você pode indexar campos dentro de documentos usando a notação de ponto.

Antes de indexar suas incorporações, recomendamos convertê-las em vetores BSON BinData, subtipovector float32 ou int8 para armazenamento e ingestão eficientes dos vetores no cluster do Atlas. Para saber mais, veja como converter suas incorporações em vetores BSON.

Você pode criar e gerenciar índices do Atlas Vector Search por meio da UI do Atlas , , Atlas CLI, Atlas Administration API e dosmongosh seguintes drivers do MongoDB :

Driver do MongoDB
Versão
1.28.0 ou superior
3.11.0 ou superior
1.16.0 ou superior
5.2.0 ou superior
5.2.0 ou superior
6.6.0 ou superior
1.20.0 ou superior
4.7 ou superior
3.1.0 ou superior
5.2.0 ou superior

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}

A definição do índice de pesquisa do Atlas Vector Search utiliza os seguintes campos:

Opção
Tipo
necessidade
Propósito
fields
matriz de documentos
Obrigatório
Campos vetoriais e de filtro para indexar, um por documento. Pelo menos um documento deve conter a definição do campo vetorial. Opcionalmente, você também pode indexar campos booleanos, de data, número, ObjectID, string e UUID, 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 de vetor.

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

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 ou nomes de campos terminando com pontos. Por exemplo, o Atlas Vector Search não é compatível com a indexação dos seguintes nomes de campo: foo..bar ou foo_bar..

fields.numDimensions
int
Obrigatório
Número de dimensões vetoriais que o Atlas Vector Search impõe no tempo do índice e no tempo 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 pesquisar os K- vizinhos mais próximos. Você pode definir este campo somente para campos do tipo vector . O valor pode ser um dos seguintes:

  • euclidean - mede a distância entre as extremidades dos vetores.

  • cosine - mede a similaridade com base no ângulo entre os vetores.

  • dotProduct - mede a similaridade como cosine, mas leva em conta a magnitude do vetor.

Para saber mais, consulte Sobre as funções de similaridade.

O campo vector da definição do seu índice deve conter uma array de números de um dos seguintes tipos:

  • BSON double

  • BSON BinData vector Subtipo float32

  • BSON BinData vector Subtipo int8

Observação

Para saber mais sobre como gerar vetores BSON BinData vector subtipo float32 ou vector subtipo int8 para seus dados, consulte Como consumir vetores quantizados.

Você deve indexar o campo vetorial como o tipo vector dentro do 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}

O Atlas Vector Search oferece suporte às seguintes funções de similaridade:

  • 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, veja Euclidiano.

  • 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.

  • dotProduct - mede a similaridade como cosine, mas leva em consideração a magnitude do vetor. Se você normalizar a magnitude, cosine e dotProduct são quase idênticos na medição de similaridade.

    Para usar dotProduct, você deve normalizar o vetor para o comprimento unitário no momento do índice e no momento da query.

Para obter o melhor desempenho, verifique seu modelo de incorporação para determinar qual função de similaridade se alinha ao processo de treinamento do seu modelo de incorporação. Se você não tiver nenhuma orientação, comece com dotProduct. Definir fields.similarity para o valor dotProduct permite medir com eficiência a similaridade com base no ângulo e na magnitude. dotProduct consome menos recursos computacionais do que cosine e é eficiente quando os vetores são de comprimento unitário. No entanto, se seus vetores não forem normalizados, avalie as pontuações de similaridade nos resultados de uma query de exemplo para euclidean distância e cosine similaridade para determinar qual corresponde a resultados razoáveis.

Opcionalmente, você pode indexar campos booleanos, de data, de número, de objectId, de cadeia de caracteres e de UUID 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. Reduz o número de documentos para executar comparações de similaridade, o que pode diminuir a latência da query e aumentar a precisão dos resultados da pesquisa.

Você deve indexar os campos que deseja filtrar 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 dos seus dados não afeta a pontuação que o Atlas Vector Search retorna usando $vectorSearchScore para queries $vectorSearch.

Um índice do Atlas Search é uma estrutura de dados que categoriza os dados em um formato facilmente pesquisável. É um mapeamento entre os termos e os documentos que contêm esses termos. Os índices do Atlas Search permitem a recuperação mais rápida de documentos usando determinados identificadores. Você deve configurar um índice do Atlas Search para fazer query em dados em seu cluster Atlas usando o Atlas Search.

Você pode criar um índice de Pesquisa do Atlas em um único campo ou em múltiplos campos. Recomendamos que você indexe os campos que usa regularmente para classificar ou filtrar seus dados para recuperar rapidamente os documentos que contêm os dados relevantes em tempo de query.

Você pode criar um índice Atlas Vector Search para todas as coleções que contenham incorporações vetoriais menores ou iguais a 4096 dimensões de comprimento para qualquer tipo de dado junto com outros dados em seu cluster do Atlas por meio da IU do Atlas , da API de Administração do Atlas , do Atlas CLI, mongosh, ou um driver do MongoDB compatível.

Para criar um índice do Atlas Vector Search, você deve ter um agrupamento do Atlas com os seguintes pré-requisitos:

  • MongoDB versão 6.0.11, 7.0.2 ou superior

  • Uma collection para a qual criar o índice do Atlas Vector Search

Observação

Você pode usar o mongosh comando ou os métodos assistente do driver para criar índices do Atlas Search em todas as camadas do Atlas cluster. Para obter uma lista de versões de driver compatíveis, consulte Clientes compatíveis.

Você precisa da função Project Data Access Admin ou superior para criar e gerenciar índices do Atlas Vector Search.

Não é possível criar mais de:

  • 3 índices em clusters M0 .

  • 5 índices em M2 clusters.

  • 10 índices em M5 clusters.

Recomendamos que você crie não mais do que 2,500 índices de pesquisa em um único cluster M10+.


➤ Use o menu suspenso Selecione seu idioma para selecionar o cliente que deseja usar para criar seu índice.


Observação

O procedimento inclui exemplos de definição de índice para a coleção embedded_movies no banco de dados sample_mflix . Se você carregar os dados de amostra em seu cluster e criar os índices de exemplo do Atlas Search para essa coleção, poderá executar as queries de amostra $vectorSearch nessa coleção. Para saber mais sobre os exemplos de consultas que você pode executar, consulte Exemplos de $vectorSearch.

Para criar um índice de Atlas Vector Search para uma coleção usando a API Atlas Administration, envie uma solicitação de POST para o endpoint do Atlas Search indexes com os parâmetros necessários.

1curl --user "{PUBLIC-KEY}:{PRIVATE-KEY}" --digest \
2--header "Accept: application/json" \
3--header "Content-Type: application/json" \
4--include \
5--request POST "https://cloud.mongodb.com/api/atlas/v2/groups/{groupId}/clusters/{clusterName}/search/indexes" \
6--data '
7 {
8 "database": "<name-of-database>",
9 "collectionName": "<name-of-collection>",
10 "type": "vectorSearch",
11 "name": "<index-name>",
12 "definition": {
13 "fields":[
14 {
15 "type": "vector",
16 "path": <field-to-index>,
17 "numDimensions": <number-of-dimensions>,
18 "similarity": "euclidean | cosine | dotProduct"
19 },
20 {
21 "type": "filter",
22 "path": "<field-to-index>"
23 },
24 ...
25 }
26 ]
27 }'

Para saber mais sobre a sintaxe e os parâmetros do endpoint, consulte Criar um índice do Atlas Search.

Exemplo

A definição de índice a seguir indexa o campo plot_embedding como o tipo vector e os campos genres e year como o tipo filter em um índice do Atlas Vector Search. O campo plot_embedding contém incorporações criadas utilizando o modelo de incorporações text-embedding-ada-002 da OpenAI. A definição do índice especifica dimensões vetoriais 1536 e mede a similaridade usando a distância euclidean.

A seguinte definição de índice indexa somente o campo de incorporações vetoriais para executar a Atlas Search vetorial .

1curl --user "{PUBLIC-KEY}:{PRIVATE-KEY}" --digest \
2--header "Accept: application/json" \
3--header "Content-Type: application/json" \
4--include \
5--request POST "https://cloud.mongodb.com/api/atlas/v2/groups/{groupId}/clusters/{clusterName}/search/indexes" \
6--data '
7 {
8 "database": "sample_mflix",
9 "collectionName": "embedded_movies",
10 "type": "vectorSearch",
11 "name": "vector_index",
12 "definition: {
13 "fields":[
14 {
15 "type": "vector",
16 "path": "plot_embedding",
17 "numDimensions": 1536,
18 "similarity": "euclidean"
19 }
20 ]
21 }
22 }'

Esta definição de índice indexa os seguintes campos:

  • Um campo de string (genres) e um campo numérico (year) para pré-filtrar os dados.

  • O campo de incorporações vetoriais (plot_embedding) para executar o Atlas Search vetorial em dados pré-filtrados.

1curl --user "{PUBLIC-KEY}:{PRIVATE-KEY}" --digest \
2--header "Accept: application/json" \
3--header "Content-Type: application/json" \
4--include \
5--request POST "https://cloud.mongodb.com/api/atlas/v2/groups/{groupId}/clusters/{clusterName}/search/indexes" \
6--data '
7 {
8 "database": "sample_mflix",
9 "collectionName": "embedded_movies",
10 "type": "vectorSearch",
11 "name": "vector_index",
12 "definition: {
13 "fields":[
14 {
15 "type": "vector",
16 "path": "plot_embedding",
17 "numDimensions": 1536,
18 "similarity": "euclidean"
19 },
20 {
21 "type": "filter",
22 "path": "genres"
23 },
24 {
25 "type": "filter",
26 "path": "year"
27 }
28 ]
29 }
30 }'

Para criar um índice do Atlas Vector Search para uma coleção usando o Atlas CLI v1.14.3 ou posterior, execute as seguintes etapas:

1

A definição do seu índice deve se assemelhar ao seguinte formato:

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

Exemplo

Crie um arquivo denominado vector-index.json.

2
<name-of-database>
Banco de dados que contém a collection para a qual você deseja criar o índice.
<name-of-collection>
Coleção para a qual você deseja criar o índice.
<index-name>
Nome do seu índice. Se você omitir o nome do índice, o Atlas Vector Search nomeará o índice vector_index.
<number-of-dimensions>
Número de dimensões vetoriais que o Atlas Vector Search impõe no momento do índice e no momento da query.
<field-to-index>
Campos de vetor e filtro para indexar.

Exemplo

Copie e cole a seguinte definição de índice no arquivo vector-index.json. A definição de índice a seguir indexa o campo plot_embedding como o tipo vector e os campos genres e year como o tipo filter em um índice do Atlas Vector Search. O campo plot_embedding contém incorporações criadas utilizando o modelo de incorporações text-embedding-ada-002 do OpenAI. A definição de índice especifica 1536 dimensões vetoriais e mede a similaridade usando a distância euclidean.

A seguinte definição de índice indexa somente o campo de incorporações vetoriais para executar a Atlas Search vetorial .

1{
2 "database": "sample_mflix",
3 "collectionName": "embedded_movies",
4 "type": "vectorSearch",
5 "name": "vector_index",
6 "fields": [
7 {
8 "type": "vector",
9 "path": "plot_embedding",
10 "numDimensions": 1536,
11 "similarity": "euclidean"
12 }
13 ]
14}

Esta definição de índice indexa os seguintes campos:

  • Um campo de string (genres) e um campo numérico (year) para pré-filtrar os dados.

  • O campo de incorporações vetoriais (plot_embedding) para executar o Atlas Search vetorial em dados pré-filtrados.

1{
2 "database": "sample_mflix",
3 "collectionName": "embedded_movies",
4 "type": "vectorSearch",
5 "name": "vector_index",
6 "fields":[
7 {
8 "type": "vector",
9 "path": "plot_embedding",
10 "numDimensions": 1536,
11 "similarity": "euclidean"
12 },
13 {
14 "type": "filter",
15 "path": "genres"
16 },
17 {
18 "type": "filter",
19 "path": "year"
20 }
21 ]
22}
3
atlas clusters search indexes create --clusterName [cluster_name] --file [vector_index].json

No comando, substitua os seguintes valores de espaço reservado:

  • cluster_name é o nome do cluster do Atlas que contém a coleção para a qual você deseja criar o índice.

  • vector_index é o nome do arquivo JSON que contém a definição do índice do Atlas Vector Search.

Exemplo

atlas clusters search indexes create --clusterName [cluster_name] --file vector-index.json

Para saber mais sobre a sintaxe e os parâmetros do comando, consulte a documentação do Atlas CLI para o comando atlas clusters search indexes create.

1
  1. Se ainda não tiver sido exibido, selecione a organização que contém seu projeto no menu Organizations na barra de navegação.

  2. Se ainda não estiver exibido, selecione o projeto desejado no menu Projects na barra de navegação.

  3. Se ainda não estiver exibido, clique em Clusters na barra lateral.

    A página Clusters é exibida.

2

Você pode acessar a página do Atlas Search pela barra lateral, pelo Data Explorer ou pela página de detalhes do cluster.

  1. Na barra lateral, clique em Atlas Search sob o título Services.

  2. No menu suspenso Select data source, selecione seu cluster e clique em Go to Atlas Search.

    A página Atlas Search é exibida.

  1. Clique no botão Browse Collections para o seu cluster.

  2. Expanda o banco de dados e selecione a coleção.

  3. Clique na guia Search Indexes da coleção.

    A página Atlas Search é exibida.

  1. Clique no nome do seu cluster.

  2. Clique na aba Atlas Search.

    A página Atlas Search é exibida.

3

Para criar, clique em Create Search Index.

4
Captura de tela da criação do índice do Atlas Vector Search
clique para ampliar
5
  1. No campo Index Name, insira um nome para o índice.

    O nome do índice deve ser exclusivo dentro do namespace, independentemente do tipo de índice.

    Exemplo

    Digite vector_index como o nome do índice de exemplo. Se você já tiver um índice chamado vector_index nessa coleção, digite um nome diferente para o índice.

  2. Na seção Database and Collection, localize o banco de dados e selecione a coleção.

    Dica

    Se você navegou até esta página a partir do Data Explorer, você pode pular essa etapa porque o Atlas pré-seleciona o banco de dados e a coleção que você selecionou no Data Explorer.

    Exemplo

    Na seção Database and Collection, localize o banco de dados sample_mflix e selecione a coleção embedded_movies.

6

Um índice do Atlas Vector Search é parecido com o exemplo a seguir:

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}

Para saber mais sobre o campo no índice, consulte Como indexar campo para a pesquisa vetorial.

Exemplo

A definição de índice a seguir indexa o campo plot_embedding como o tipo vector e os campos genres e year como o tipo filter em um índice do Atlas Vector Search. O campo plot_embedding contém incorporações criadas utilizando o modelo de incorporações text-embedding-ada-002 da OpenAI. A definição do índice especifica dimensões vetoriais 1536 e mede a similaridade usando a distância euclidean.

A seguinte definição de índice indexa somente o campo de incorporações vetoriais para executar a Atlas Search vetorial .

1{
2 "fields": [{
3 "type": "vector",
4 "path": "plot_embedding",
5 "numDimensions": 1536,
6 "similarity": "euclidean"
7 }]
8}

Esta definição de índice indexa os seguintes campos:

  • Um campo de string (genres) e um campo numérico (year) para pré-filtrar os dados.

  • O campo de incorporações vetoriais (plot_embedding) para executar o Atlas Search vetorial em dados pré-filtrados.

1{
2 "fields": [{
3 "type": "vector",
4 "path": "plot_embedding",
5 "numDimensions": 1536,
6 "similarity": "euclidean"
7 },
8 {
9 "type": "filter",
10 "path": "genres"
11 },
12 {
13 "type": "filter",
14 "path": "year"
15 }]
16}
7
8

O Atlas exibe uma janela modal para que você saiba que seu índice está crescendo.

9
10

O índice recém-criado aparece na aba Atlas Search. Enquanto o índice está construindo, o campo StatusBuild in Progress. Quando o índice terminar de construir, o campo StatusActive.

Observação

Collections maiores demoram mais tempo para indexar. Você receberá uma notificação por e-mail quando seu índice terminar a criação.

Para criar um índice Atlas Vector Search para uma coleção usando mongosh v2.1.2 ou posterior, execute as seguintes etapas:

1

Para saber mais, consulte Conectar via mongosh.

2

Exemplo

use sample_mflix
switched to db sample_mflix
3

O método db.collection.createSearchIndex() tem a seguinte sintaxe:

1db.<collectionName>.createSearchIndex(
2 "<index-name>",
3 "vectorSearch", //index type
4 {
5 fields: [
6 {
7 "type": "vector",
8 "numDimensions": <number-of-dimensions>,
9 "path": "<field-to-index>",
10 "similarity": "euclidean | cosine | dotProduct"
11 },
12 {
13 "type": "filter",
14 "path": "<field-to-index>"
15 },
16 ...
17 ]
18 }
19);

Exemplo

A definição de índice a seguir indexa o campo plot_embedding como o tipo vector e os campos genres e year como o tipo filter em um índice do Atlas Vector Search. O campo plot_embedding contém incorporações criadas utilizando o modelo de incorporações text-embedding-ada-002 da OpenAI. A definição do índice especifica dimensões vetoriais 1536 e mede a similaridade usando a distância euclidean.

A seguinte definição de índice indexa somente o campo de incorporações vetoriais para executar a Atlas Search vetorial .

1db.embedded_movies.createSearchIndex(
2 "vector_index",
3 "vectorSearch",
4 {
5 "fields": [
6 {
7 "type": "vector",
8 "path": "plot_embedding",
9 "numDimensions": 1536,
10 "similarity": "euclidean"
11 }
12 ]
13 }
14);

Esta definição de índice indexa os seguintes campos:

  • Um campo de string (genres) e um campo numérico (year) para pré-filtrar os dados.

  • O campo de incorporações vetoriais (plot_embedding) para executar o Atlas Search vetorial em dados pré-filtrados.

1db.embedded_movies.createSearchIndex(
2 "vector_index",
3 "vectorSearch",
4 {
5 "fields": [
6 {
7 "type": "vector",
8 "path": "plot_embedding",
9 "numDimensions": 1536,
10 "similarity": "euclidean"
11 },
12 {
13 "type": "filter",
14 "path": "genres"
15 },
16 {
17 "type": "filter",
18 "path": "year"
19 }
20 ]
21 }
22);

Para criar um índice do Atlas Vector Search para uma coleção usando o driver Go do MongoDB v1.16.0 ou posterior, execute as seguintes etapas:

1
1package main
2
3import (
4 "context"
5 "fmt"
6 "log"
7
8 "go.mongodb.org/mongo-driver/bson"
9 "go.mongodb.org/mongo-driver/mongo"
10 "go.mongodb.org/mongo-driver/mongo/options"
11)
12
13func main() {
14 ctx := context.Background()
15
16 // Replace the placeholder with your Atlas connection string
17 const uri = "<connectionString>"
18
19 // Connect to your Atlas cluster
20 clientOptions := options.Client().ApplyURI(uri)
21 client, err := mongo.Connect(ctx, clientOptions)
22 if err != nil {
23 log.Fatalf("failed to connect to the server: %v", err)
24 }
25 defer func() { _ = client.Disconnect(ctx) }()
26
27 // Set the namespace
28 coll := client.Database("<databaseName>").Collection("<collectionName>")
29
30 // Define the index details
31 type vectorDefinitionField struct {
32 Type string `bson:"type"`
33 Path string `bson:"path"`
34 NumDimensions int `bson:"numDimensions"`
35 Similarity string `bson:"similarity"`
36 }
37
38 type vectorDefinition struct {
39 Fields []vectorDefinitionField `bson:"fields"`
40 }
41
42 indexName := "<indexName>"
43 opts := options.SearchIndexes().SetName(indexName).SetType("vectorSearch")
44
45 indexModel := mongo.SearchIndexModel{
46 Definition: vectorDefinition{
47 Fields: []vectorDefinitionField{{
48 Type: "vector",
49 Path: "<fieldToIndex>",
50 NumDimensions: <numberOfDimensions>,
51 Similarity: "euclidean | cosine | dotProduct"}},
52 },
53 Options: opts,
54 }
55
56 // Create the index
57 log.Println("Creating the index.")
58 searchIndexName, err := coll.SearchIndexes().CreateOne(ctx, indexModel)
59 if err != nil {
60 log.Fatalf("failed to create the search index: %v", err)
61 }
62
63 // Await the creation of the index.
64 log.Println("Polling to confirm successful index creation.")
65 log.Println("NOTE: This may take up to a minute.")
66 searchIndexes := coll.SearchIndexes()
67 var doc bson.Raw
68 for doc == nil {
69 cursor, err := searchIndexes.List(ctx, options.SearchIndexes().SetName(searchIndexName))
70 if err != nil {
71 fmt.Errorf("failed to list search indexes: %w", err)
72 }
73
74 if !cursor.Next(ctx) {
75 break
76 }
77
78 name := cursor.Current.Lookup("name").StringValue()
79 queryable := cursor.Current.Lookup("queryable").Boolean()
80 if name == searchIndexName && queryable {
81 doc = cursor.Current
82 } else {
83 time.Sleep(5 * time.Second)
84 }
85 }
86
87 log.Println("Name of Index Created: " + searchIndexName)
88}

Exemplo

Crie um arquivo denominado vector-index.go.

2
<connectionString>
Connection string do Atlas. Para saber mais, consulte Conectar via drivers.
<databaseName>
Banco de dados que contém a collection para a qual você deseja criar o índice.
<collectionName>
Coleção para a qual você deseja criar o índice.
<indexName>
Nome do seu índice. Se você omitir o nome do índice, o Atlas Search nomeará o índice vector_index.
<numberOfDimensions>
Número de dimensões vetoriais que o Atlas Vector Search impõe no momento do índice e no momento da query.
<fieldToIndex>
Campos de vetor e filtro para indexar.

Exemplo

Copie e cole o seguinte no arquivo vector-index.go e substitua o valor de espaço reservado <connectionString> . A seguinte definição de índice indexa o campo plot_embedding como o tipo vector e os campos genres e year como o tipo filter em um índice do Atlas Vector Search. O campo plot_embedding contém incorporações criadas utilizando o modelo de incorporações text-embedding-ada-002 do OpenAI. A definição de índice especifica 1536 dimensões vetoriais e mede a similaridade usando euclidean distância.

A definição de índice a seguir indexa somente o campo de incorporações vetoriais (plot_embedding) para executar a Atlas Search vetorial.

1package main
2
3import (
4 "context"
5 "fmt"
6 "log"
7 "time"
8
9 "go.mongodb.org/mongo-driver/bson"
10 "go.mongodb.org/mongo-driver/mongo"
11 "go.mongodb.org/mongo-driver/mongo/options"
12)
13
14func main() {
15 ctx := context.Background()
16
17 // Replace the placeholder with your Atlas connection string
18 const uri = "<connectionString>"
19
20 // Connect to your Atlas cluster
21 clientOptions := options.Client().ApplyURI(uri)
22 client, err := mongo.Connect(ctx, clientOptions)
23 if err != nil {
24 log.Fatalf("failed to connect to the server: %v", err)
25 }
26 defer func() { _ = client.Disconnect(ctx) }()
27
28 // Set the namespace
29 coll := client.Database("sample_mflix").Collection("embedded_movies")
30
31 // Define the index details
32 type vectorDefinitionField struct {
33 Type string `bson:"type"`
34 Path string `bson:"path"`
35 NumDimensions int `bson:"numDimensions"`
36 Similarity string `bson:"similarity"`
37 }
38
39 type vectorDefinition struct {
40 Fields []vectorDefinitionField `bson:"fields"`
41 }
42
43 indexName := "vector_index"
44 opts := options.SearchIndexes().SetName(indexName).SetType("vectorSearch")
45
46 indexModel := mongo.SearchIndexModel{
47 Definition: vectorDefinition{
48 Fields: []vectorDefinitionField{{
49 Type: "vector",
50 Path: "plot_embedding",
51 NumDimensions: 1536,
52 Similarity: "euclidean"}},
53 },
54 Options: opts,
55 }
56
57 // Create the index
58 searchIndexName, err := coll.SearchIndexes().CreateOne(ctx, indexModel)
59 if err != nil {
60 log.Fatalf("failed to create the search index: %v", err)
61 }
62 log.Println("New search index named " + searchIndexName + " is building.")
63
64 // Await the creation of the index.
65 log.Println("Polling to check if the index is ready. This may take up to a minute.")
66 searchIndexes := coll.SearchIndexes()
67 var doc bson.Raw
68 for doc == nil {
69 cursor, err := searchIndexes.List(ctx, options.SearchIndexes().SetName(searchIndexName))
70 if err != nil {
71 fmt.Errorf("failed to list search indexes: %w", err)
72 }
73
74 if !cursor.Next(ctx) {
75 break
76 }
77
78 name := cursor.Current.Lookup("name").StringValue()
79 queryable := cursor.Current.Lookup("queryable").Boolean()
80 if name == searchIndexName && queryable {
81 doc = cursor.Current
82 } else {
83 time.Sleep(5 * time.Second)
84 }
85 }
86
87 log.Println(searchIndexName + " is ready for querying.")
88}

Esta definição de índice indexa os seguintes campos:

  • Um campo de string (genres) e um campo numérico (year) para pré-filtrar os dados.

  • O campo de incorporações vetoriais (plot_embedding) para executar o Atlas Search vetorial em dados pré-filtrados.

1package main
2
3import (
4 "context"
5 "fmt"
6 "log"
7 "time"
8
9 "go.mongodb.org/mongo-driver/bson"
10 "go.mongodb.org/mongo-driver/mongo"
11 "go.mongodb.org/mongo-driver/mongo/options"
12)
13
14func main() {
15 ctx := context.Background()
16
17 // Replace the placeholder with your Atlas connection string
18 const uri = "<connectionString>"
19
20 // Connect to your Atlas cluster
21 clientOptions := options.Client().ApplyURI(uri)
22 client, err := mongo.Connect(ctx, clientOptions)
23 if err != nil {
24 log.Fatalf("failed to connect to the server: %v", err)
25 }
26 defer func() { _ = client.Disconnect(ctx) }()
27
28 // Set the namespace
29 coll := client.Database("sample_mflix").Collection("embedded_movies")
30 indexName := "vector_index"
31 opts := options.SearchIndexes().SetName(indexName).SetType("vectorSearch")
32
33 type vectorDefinitionField struct {
34 Type string `bson:"type"`
35 Path string `bson:"path"`
36 NumDimensions int `bson:"numDimensions"`
37 Similarity string `bson:"similarity"`
38 }
39
40 type filterField struct {
41 Type string `bson:"type"`
42 Path string `bson:"path"`
43 }
44
45 type indexDefinition struct {
46 Fields []vectorDefinitionField `bson:"fields"`
47 }
48
49 vectorDefinition := vectorDefinitionField{
50 Type: "vector",
51 Path: "plot_embedding",
52 NumDimensions: 1536,
53 Similarity: "euclidean"}
54 genreFilterDefinition := filterField{"filter", "genres"}
55 yearFilterDefinition := filterField{"filter", "year"}
56
57 indexModel := mongo.SearchIndexModel{
58 Definition: bson.D{{"fields", [3]interface{}{
59 vectorDefinition,
60 genreFilterDefinition,
61 yearFilterDefinition}}},
62 Options: opts,
63 }
64
65 // Create the index
66 searchIndexName, err := coll.SearchIndexes().CreateOne(ctx, indexModel)
67 if err != nil {
68 log.Fatalf("failed to create the search index: %v", err)
69 }
70 log.Println("New search index named " + searchIndexName + " is building.")
71
72 // Await the creation of the index.
73 log.Println("Polling to check if the index is ready. This may take up to a minute.")
74 searchIndexes := coll.SearchIndexes()
75 var doc bson.Raw
76 for doc == nil {
77 cursor, err := searchIndexes.List(ctx, options.SearchIndexes().SetName(searchIndexName))
78 if err != nil {
79 fmt.Errorf("failed to list search indexes: %w", err)
80 }
81
82 if !cursor.Next(ctx) {
83 break
84 }
85
86 name := cursor.Current.Lookup("name").StringValue()
87 queryable := cursor.Current.Lookup("queryable").Boolean()
88 if name == searchIndexName && queryable {
89 doc = cursor.Current
90 } else {
91 time.Sleep(5 * time.Second)
92 }
93 }
94
95 log.Println(searchIndexName + " is ready for querying.")
96}
3
go run <file-name>.go

Exemplo

go run vector-index.go

Para criar um índice do Atlas Vector Search para uma coleção usando o driver Java do MongoDB v5.2.0 ou posterior, execute as seguintes etapas:

1
1import com.mongodb.client.ListSearchIndexesIterable;
2import com.mongodb.client.MongoClient;
3import com.mongodb.client.MongoClients;
4import com.mongodb.client.MongoCollection;
5import com.mongodb.client.MongoCursor;
6import com.mongodb.client.MongoDatabase;
7import com.mongodb.client.model.SearchIndexModel;
8import com.mongodb.client.model.SearchIndexType;
9import org.bson.Document;
10import org.bson.conversions.Bson;
11
12import java.util.Arrays;
13import java.util.Collections;
14import java.util.List;
15
16public class VectorIndex {
17
18 public static void main(String[] args) {
19
20 // Replace the placeholder with your Atlas connection string
21 String uri = "<connectionString>";
22
23 // Connect to your Atlas cluster
24 try (MongoClient mongoClient = MongoClients.create(uri)) {
25
26 // Set the namespace
27 MongoDatabase database = mongoClient.getDatabase("<databaseName>");
28 MongoCollection<Document> collection = database.getCollection("<collectionName>");
29
30 // Define the index details
31 String indexName = "<indexName>";
32 Bson definition = new Document(
33 "fields",
34 Arrays.asList(
35 new Document("type", "vector")
36 .append("path", "<fieldToIndex>")
37 .append("numDimensions", <numberOfDimensions>)
38 .append("similarity", "euclidean | cosine | dotProduct"),
39 new Document("type", "filter")
40 .append("path", "<fieldToIndex>"),
41 ...
42 )
43 );
44
45 // Define the index model
46 SearchIndexModel indexModel = new SearchIndexModel(
47 indexName,
48 definition,
49 SearchIndexType.vectorSearch()
50 );
51
52 // Create the index
53 try {
54 List<String> result = collection.createSearchIndexes(Collections.singletonList(indexModel));
55 System.out.println("New search index named " + result.get(0) + " is building.");
56 } catch (Exception e) {
57 throw new RuntimeException("Error creating index: " + e);
58 }
59
60
61 // Wait for Atlas to build the index
62 System.out.println("Polling to check if the index is ready. This may take up to a minute.");
63
64 ListSearchIndexesIterable<Document> searchIndexes = collection.listSearchIndexes();
65 Document doc = null;
66 while (doc == null) {
67 try (MongoCursor<Document> cursor = searchIndexes.iterator()) {
68 if (!cursor.hasNext()) {
69 break;
70 }
71 Document current = cursor.next();
72 String name = current.getString("name");
73 // When the index completes building, it becomes `queryable`
74 boolean queryable = current.getBoolean("queryable");
75 if (name.equals(indexName) && queryable) {
76 doc = current;
77 } else {
78 Thread.sleep(500);
79 }
80 } catch (Exception e) {
81 throw new RuntimeException("Failed to list search indexes: " + e);
82 mongoClient.close();
83 }
84 }
85 System.out.println(indexName + " is ready for querying.");
86
87 } catch (Exception e) {
88 throw new RuntimeException("Error connecting to MongoDB: " + e);
89 }
90 }
91}
2
<connectionString>
Connection string do Atlas. Para saber mais, consulte Conectar via drivers.
<databaseName>
Banco de dados que contém a collection para a qual você deseja criar o índice.
<collectionName>
Coleção para a qual você deseja criar o índice.
<indexName>
Nome do seu índice. Se você omitir o nome do índice, o Atlas Search nomeará o índice vector_index.
<numberOfDimensions>
Número de dimensões vetoriais que o Atlas Vector Search impõe no momento do índice e no momento da query.
<fieldToIndex>
Campos de vetor e filtro para indexar.

As seguintes definições de índice de exemplo:

  • Indexe o campo plot_embedding como o tipo vector e os campos genres e year como o tipo filter em um índice do Atlas Vector Search.

  • O campo plot_embedding é especificado como o campo de incorporações de vetores, que contém incorporações criadas utilizando o modelo de incorporações text-embedding-ada-002 do OpenAI.

  • A definição de índice especifica 1536 dimensões vetoriais e mede a similaridade usando a distância euclidean.

Esta definição de índice indexa apenas o campo de incorporações vetoriais (plot_embedding) para executar a pesquisa vetorial.

Copie e cole o seguinte no arquivo que você criou e substitua o valor do espaço reservado <connectionString>.

1import com.mongodb.client.ListSearchIndexesIterable;
2import com.mongodb.client.MongoClient;
3import com.mongodb.client.MongoClients;
4import com.mongodb.client.MongoCollection;
5import com.mongodb.client.MongoCursor;
6import com.mongodb.client.MongoDatabase;
7import com.mongodb.client.model.SearchIndexModel;
8import com.mongodb.client.model.SearchIndexType;
9import org.bson.Document;
10import org.bson.conversions.Bson;
11
12import java.util.Collections;
13import java.util.List;
14
15public class VectorIndex {
16
17 public static void main(String[] args) {
18
19 // Replace the placeholder with your Atlas connection string
20 String uri = "<connectionString>";
21
22 // Connect to your Atlas cluster
23 try (MongoClient mongoClient = MongoClients.create(uri)) {
24
25 // Set the namespace
26 MongoDatabase database = mongoClient.getDatabase("sample_mflix");
27 MongoCollection<Document> collection = database.getCollection("embedded_movies");
28
29 // Define the index details
30 String indexName = "vector_index";
31 Bson definition = new Document(
32 "fields",
33 Collections.singletonList(
34 new Document("type", "vector")
35 .append("path", "plot_embedding")
36 .append("numDimensions", 1536)
37 .append("similarity", "euclidean")));
38
39 // Define the index model
40 SearchIndexModel indexModel = new SearchIndexModel(
41 indexName,
42 definition,
43 SearchIndexType.vectorSearch());
44
45 // Create the index
46 try {
47 List<String> result = collection.createSearchIndexes(Collections.singletonList(indexModel));
48 System.out.println("New search index named " + result.get(0) + " is building.");
49 } catch (Exception e) {
50 throw new RuntimeException("Error creating index: " + e);
51 }
52
53 // Wait for Atlas to build the index
54 System.out.println("Polling to check if the index is ready. This may take up to a minute.");
55
56 ListSearchIndexesIterable<Document> searchIndexes = collection.listSearchIndexes();
57 Document doc = null;
58 while (doc == null) {
59 try (MongoCursor<Document> cursor = searchIndexes.iterator()) {
60 if (!cursor.hasNext()) {
61 break;
62 }
63 Document current = cursor.next();
64 String name = current.getString("name");
65 // When the index completes building, it becomes `queryable`
66 boolean queryable = current.getBoolean("queryable");
67 if (name.equals(indexName) && queryable) {
68 doc = current;
69 } else {
70 Thread.sleep(500);
71 }
72 } catch (Exception e) {
73 throw new RuntimeException("Failed to list search indexes: " + e);
74 }
75 }
76 System.out.println(indexName + " is ready for querying.");
77
78 } catch (Exception e) {
79 throw new RuntimeException("Error connecting to MongoDB: " + e);
80 }
81 }
82}

Esta definição de índice indexa os seguintes campos:

  • Um campo de string (genres) e um campo numérico (year) para pré-filtrar os dados.

  • O campo de incorporações vetoriais (plot_embedding) para executar o Atlas Search vetorial em dados pré-filtrados.

Copie e cole o seguinte no arquivo que você criou e substitua o valor do espaço reservado <connectionString>.

1import com.mongodb.client.ListSearchIndexesIterable;
2import com.mongodb.client.MongoClient;
3import com.mongodb.client.MongoClients;
4import com.mongodb.client.MongoCollection;
5import com.mongodb.client.MongoCursor;
6import com.mongodb.client.MongoDatabase;
7import com.mongodb.client.model.SearchIndexModel;
8import com.mongodb.client.model.SearchIndexType;
9import org.bson.Document;
10import org.bson.conversions.Bson;
11
12import java.util.Arrays;
13import java.util.Collections;
14import java.util.List;
15
16public class VectorIndex {
17
18 public static void main(String[] args) {
19
20 // Replace the placeholder with your Atlas connection string
21 String uri = "<connectionString>";
22
23 // Connect to your Atlas cluster
24 try (MongoClient mongoClient = MongoClients.create(uri)) {
25
26 // Set the namespace
27 MongoDatabase database = mongoClient.getDatabase("sample_mflix");
28 MongoCollection<Document> collection = database.getCollection("embedded_movies");
29
30 // Define the index details with the filter fields
31 String indexName = "vector_index";
32 Bson definition = new Document(
33 "fields",
34 Arrays.asList(
35 new Document("type", "vector")
36 .append("path", "plot_embedding")
37 .append("numDimensions", 1536)
38 .append("similarity", "euclidean"),
39 new Document("type", "filter")
40 .append("path", "genres"),
41 new Document("type", "filter")
42 .append("path", "year")));
43
44 // Define the index model
45 SearchIndexModel indexModel = new SearchIndexModel(
46 indexName,
47 definition,
48 SearchIndexType.vectorSearch());
49
50 // Create the filtered index
51 try {
52 List<String> result = collection.createSearchIndexes(Collections.singletonList(indexModel));
53 System.out.println("New search index named " + result.get(0) + " is building.");
54 } catch (Exception e) {
55 throw new RuntimeException("Error creating index: " + e);
56 }
57
58 // Wait for Atlas to build the index
59 System.out.println("Polling to check if the index is ready. This may take up to a minute.");
60
61 ListSearchIndexesIterable<Document> searchIndexes = collection.listSearchIndexes();
62 Document doc = null;
63 while (doc == null) {
64 try (MongoCursor<Document> cursor = searchIndexes.iterator()) {
65 if (!cursor.hasNext()) {
66 break;
67 }
68 Document current = cursor.next();
69 String name = current.getString("name");
70 // When the index completes building, it becomes `queryable`
71 boolean queryable = current.getBoolean("queryable");
72 if (name.equals(indexName) && queryable) {
73 doc = current;
74 } else {
75 Thread.sleep(500);
76 }
77 } catch (Exception e) {
78 throw new RuntimeException("Failed to list search indexes: " + e);
79 mongoClient.close();
80 }
81 }
82 System.out.println(indexName + " is ready for querying.");
83
84 } catch (Exception e) {
85 throw new RuntimeException("Error connecting to MongoDB: " + e);
86 }
87 }
88}
3

No seu IDE, execute o arquivo para criar o índice.

Para criar um índice do Atlas Vector Search para uma coleção usando o driver do MongoDB Node v6.6.0 ou posterior, execute as seguintes etapas:

1
1const { MongoClient } = require("mongodb");
2
3// connect to your Atlas deployment
4const uri = "<connectionString>";
5
6const client = new MongoClient(uri);
7
8async function run() {
9 try {
10 const database = client.db("<databaseName>");
11 const collection = database.collection("<collectionName>");
12
13 // define your Atlas Vector Search index
14 const index = {
15 name: "<indexName>",
16 type: "vectorSearch",
17 definition: {
18 "fields": [
19 {
20 "type": "vector",
21 "numDimensions": <numberOfDimensions>,
22 "path": "<fieldToIndex>",
23 "similarity": "euclidean | cosine | dotProduct"
24 },
25 {
26 "type": "filter",
27 "path": "<fieldToIndex>"
28 },
29 ...
30 ]
31 }
32 }
33
34 // run the helper method
35 const result = await collection.createSearchIndex(index);
36 console.log(`New search index named ${result} is building.`);
37 // wait for the index to be ready to query
38 console.log("Polling to check if the index is ready. This may take up to a minute.")
39 let isQueryable = false;
40 while (!isQueryable) {
41 const cursor = collection.listSearchIndexes();
42 for await (const index of cursor) {
43 if (index.name === result) {
44 if (index.queryable) {
45 console.log(`${result} is ready for querying.`);
46 isQueryable = true;
47 } else {
48 await new Promise(resolve => setTimeout(resolve, 5000));
49 }
50 }
51 }
52 }
53 } finally {
54 await client.close();
55 }
56}
57run().catch(console.dir);

Exemplo

Crie um arquivo denominado vector-index.js.

2
<connectionString>
Connection string do Atlas. Para saber mais, consulte Conectar via drivers.
<databaseName>
Banco de dados que contém a collection para a qual você deseja criar o índice.
<collectionName>
Coleção para a qual você deseja criar o índice.
<indexName>
Nome do seu índice. Se você omitir o nome do índice, o Atlas Search nomeará o índice vector_index.
<numberOfDimensions>
Número de dimensões vetoriais que o Atlas Vector Search impõe no momento do índice e no momento da query.
<fieldToIndex>
Campos de vetor e filtro para indexar.

Exemplo

Copie e cole o seguinte no arquivo vector-index.js e substitua o valor de espaço reservado <connectionString> . A seguinte definição de índice indexa o campo plot_embedding como o tipo vector e os campos genres e year como o tipo filter em um índice do Atlas Vector Search. O campo plot_embedding contém incorporações criadas utilizando o modelo de incorporações text-embedding-ada-002 do OpenAI. A definição de índice especifica 1536 dimensões vetoriais e mede a similaridade usando euclidean distância.

A definição de índice a seguir indexa somente o campo de incorporações vetoriais (plot_embedding) para executar a Atlas Search vetorial.

1const { MongoClient } = require("mongodb");
2
3// connect to your Atlas deployment
4const uri = "<connectionString>";
5
6const client = new MongoClient(uri);
7
8async function run() {
9 try {
10 const database = client.db("sample_mflix");
11 const collection = database.collection("embedded_movies");
12
13 // define your Atlas Vector Search index
14 const index = {
15 name: "vector_index",
16 type: "vectorSearch",
17 definition: {
18 "fields": [
19 {
20 "type": "vector",
21 "numDimensions": 1536,
22 "path": "plot_embedding",
23 "similarity": "euclidean"
24 }
25 ]
26 }
27 }
28
29 // run the helper method
30 const result = await collection.createSearchIndex(index);
31 console.log(`New search index named ${result} is building.`);
32
33 // wait for the index to be ready to query
34 console.log("Polling to check if the index is ready. This may take up to a minute.")
35 let isQueryable = false;
36 while (!isQueryable) {
37 const cursor = collection.listSearchIndexes();
38 for await (const index of cursor) {
39 if (index.name === result) {
40 if (index.queryable) {
41 console.log(`${result} is ready for querying.`);
42 isQueryable = true;
43 } else {
44 await new Promise(resolve => setTimeout(resolve, 5000));
45 }
46 }
47 }
48 }
49 } finally {
50 await client.close();
51 }
52}
53run().catch(console.dir);

Esta definição de índice indexa os seguintes campos:

  • Um campo de string (genres) e um campo numérico (year) para pré-filtrar os dados.

  • O campo de incorporações vetoriais (plot_embedding) para executar o Atlas Search vetorial em dados pré-filtrados.

1const { MongoClient } = require("mongodb");
2
3// connect to your Atlas deployment
4const uri = "<connectionString>";
5
6const client = new MongoClient(uri);
7
8async function run() {
9 try {
10 const database = client.db("sample_mflix");
11 const collection = database.collection("embedded_movies");
12
13 // define your Atlas Vector Search index
14 const index = {
15 name: "vector_index",
16 type: "vectorSearch",
17 definition: {
18 "fields": [
19 {
20 "type": "vector",
21 "numDimensions": 1536,
22 "path": "plot_embedding",
23 "similarity": "euclidean"
24 },
25 {
26 "type": "filter",
27 "path": "genres"
28 },
29 {
30 "type": "filter",
31 "path": "year"
32 }
33 ]
34 }
35 }
36
37 // run the helper method
38 const result = await collection.createSearchIndex(index);
39 console.log(`New search index named ${result} is building.`);
40
41 // wait for the index to be ready to query
42 console.log("Polling to check if the index is ready. This may take up to a minute.")
43 let isQueryable = false;
44 while (!isQueryable) {
45 const cursor = collection.listSearchIndexes();
46 for await (const index of cursor) {
47 if (index.name === result) {
48 if (index.queryable) {
49 console.log(`${result} is ready for querying.`);
50 isQueryable = true;
51 } else {
52 await new Promise(resolve => setTimeout(resolve, 5000));
53 }
54 }
55 }
56 }
57 } finally {
58 await client.close();
59 }
60}
61run().catch(console.dir);
3
node <file-name>.js

Exemplo

node vector_index.js

Para criar um índice do Atlas Vector Search para uma coleção usando o driver PyMongo v4.7 ou posterior, execute as seguintes etapas:

1
1import pymongo
2from pymongo.mongo_client import MongoClient
3from pymongo.operations import SearchIndexModel
4
5# Connect to your Atlas deployment
6uri = "<connectionString>"
7client = MongoClient(uri)
8
9# Access your database and collection
10database = client["<databaseName>"]
11collection = database["<collectionName>"]
12
13# Create your index model, then create the search index
14search_index_model = SearchIndexModel(
15 definition={
16 "fields": [
17 {
18 "type": "vector",
19 "numDimensions": <numberofDimensions>,
20 "path": "<fieldToIndex>",
21 "similarity": "euclidean | cosine | dotProduct"
22 },
23 {
24 "type": "filter",
25 "path": "<fieldToIndex>"
26 },
27 ...
28 ]
29 },
30 name="<indexName>",
31 type="vectorSearch",
32)
33
34result = collection.create_search_index(model=search_index_model)
35print("New search index named " + result + " is building.")
36
37# Wait for initial sync to complete
38print("Polling to check if the index is ready. This may take up to a minute.")
39predicate=None
40if predicate is None:
41 predicate = lambda index: index.get("queryable") is True
42
43while True:
44 indices = list(collection.list_search_indexes(result))
45 if len(indices) and predicate(indices[0]):
46 break
47 time.sleep(5)
48print(result + " is ready for querying.")
49
50client.close()

Para saber mais, consulte o create_search_index() método.

1from pymongo.mongo_client import MongoClient
2from pymongo.operations import SearchIndexModel
3
4def create_indexes():
5 # Connect to your Atlas deployment
6 uri = "<connectionString>"
7 client = MongoClient(uri)
8
9 # Access your database and collection
10 database = client["<databaseName>"]
11 collection = database["<collectionName>"]
12
13 # Create your index models and add them to an array
14 first_model = SearchIndexModel(
15 definition={
16 "fields": [
17 {
18 "type": "vector",
19 "numDimensions": <numberOfDimensions>,
20 "path": "<fieldToIndex>",
21 "similarity": "euclidean | cosine | dotProduct"
22 },
23 {
24 "type": "filter",
25 "path": "<fieldToIndex>"
26 },
27 ...
28 ]
29 },
30 name="<indexName>",
31 type="vectorSearch",
32 )
33
34 second_model = SearchIndexModel(
35 definition={
36 "fields": [
37 {
38 "type": "vector",
39 "numDimensions": <numberOfDimensions>,
40 "path": "<fieldToIndex>",
41 "similarity": "euclidean | cosine | dotProduct"
42 },
43 {
44 "type": "filter",
45 "path": "<fieldToIndex>"
46 },
47 ...
48 ]
49 },
50 name="<index name>",
51 type="vectorSearch",
52 )
53
54 ...
55
56 idx_models = [first_model, second_model, ...]
57
58 # Create the search indexes
59 result = collection.create_search_indexes(models=idx_models)
60 print(result)
61
62 client.close()

Para saber mais, consulte o create_search_indexes() método.

Exemplo

Crie um arquivo denominado vector-index.py.

2
<connectionString>
Connection string do Atlas. Para saber mais, consulte Conectar via drivers.
<databaseName>
Banco de dados que contém a collection para a qual você deseja criar o índice.
<collectionName>
Coleção para a qual você deseja criar o índice.
<indexName>
Nome do seu índice. Se você omitir o nome do índice, o Atlas Search nomeará o índice vector_index.
<numberOfDimensions>
Número de dimensões vetoriais que o Atlas Vector Search impõe no momento do índice e no momento da query.
<fieldToIndex>
Campos de vetor e filtro para indexar.

Exemplo

Copie e cole o seguinte no vector-index.py e substitua o valor do placeholder <connectionString> . A seguinte definição de índice indexa o campo plot_embedding como o tipo vector e os campos genres e year como o tipo filter em um índice do Atlas Vector Search. O campo plot_embedding contém incorporações criadas utilizando o modelo de incorporações text-embedding-ada-002 do OpenAI. A definição de índice especifica 1536 dimensões vetoriais e mede a similaridade usando euclidean distância.

A definição de índice a seguir indexa somente o campo de incorporações vetoriais (plot_embedding) para executar a Atlas Search vetorial.

1from pymongo.mongo_client import MongoClient
2from pymongo.operations import SearchIndexModel
3import time
4
5# Connect to your Atlas deployment
6uri = "<connectionString>"
7client = MongoClient(uri)
8
9# Access your database and collection
10database = client["sample_mflix"]
11collection = database["embedded_movies"]
12
13# Create your index model, then create the search index
14search_index_model = SearchIndexModel(
15 definition={
16 "fields": [
17 {
18 "type": "vector",
19 "path": "plot_embedding",
20 "numDimensions": 1536,
21 "similarity": "euclidean"
22 }
23 ]
24 },
25 name="vector_index",
26 type="vectorSearch",
27)
28
29result = collection.create_search_index(model=search_index_model)
30print("New search index named " + result + " is building.")
31# Wait for initial sync to complete
32print("Polling to check if the index is ready. This may take up to a minute.")
33predicate=None
34if predicate is None:
35 predicate = lambda index: index.get("queryable") is True
36
37while True:
38 indices = list(collection.list_search_indexes(name))
39 if len(indices) and predicate(indices[0]):
40 break
41 time.sleep(5)
42print(result + " is ready for querying.")
43
44client.close()

Esta definição de índice indexa os seguintes campos:

  • Um campo de string (genres) e um campo numérico (year) para pré-filtrar os dados.

  • O campo de incorporações vetoriais (plot_embedding) para executar o Atlas Search vetorial em dados pré-filtrados.

1from pymongo.mongo_client import MongoClient
2from pymongo.operations import SearchIndexModel
3import time
4
5# Connect to your Atlas deployment
6uri = "<connectionString>"
7client = MongoClient(uri)
8
9# Access your database and collection
10database = client["sample_mflix"]
11collection = database["embedded_movies"]
12
13# Create your index model, then create the search index
14search_index_model = SearchIndexModel(
15 definition={
16 "fields": [
17 {
18 "type": "vector",
19 "path": "plot_embedding",
20 "numDimensions": 1536,
21 "similarity": "euclidean"
22 },
23 {
24 "type": "filter",
25 "path": "genres"
26 },
27 {
28 "type": "filter",
29 "path": "year"
30 }
31 ]
32 },
33 name="vector_index",
34 type="vectorSearch",
35)
36
37result = collection.create_search_index(model=search_index_model)
38print("New search index named " + result + " is building.")
39# Wait for initial sync to complete
40print("Polling to check if the index is ready. This may take up to a minute.")
41predicate=None
42if predicate is None:
43 predicate = lambda index: index.get("queryable") is True
44
45while True:
46 indices = list(collection.list_search_indexes(result))
47 if len(indices) and predicate(indices[0]):
48 break
49 time.sleep(5)
50print(result + " is ready for querying.")
51
52client.close()
3
python <file-name>.py

Exemplo

python vector-index.py

Você pode visualizar os índices do Atlas Vector Search para todas as coleções na interface do usuário do Atlas, na Administration API do Atlas, na Atlas CLI, mongosh ou em um driver MongoDB compatível.

Você precisa do role Project Search Index Editor ou superior para visualizar o índice de pesquisa do Atlas Vector Search.

Observação

Você pode usar o mongosh comando ou os métodos assistente do driver para recuperar índices do Atlas Search em todas as camadas do Atlas cluster. Para obter uma lista de versões de driver compatíveis, consulte Clientes compatíveis.


➤ Use o menu suspenso Selecione a linguagem para definir a linguagem do exemplo nesta seção.


Para recuperar todos os índices do Atlas Vector Search de uma coleção usando a API Atlas Administration, envie uma solicitação GET para o endpoint do Atlas Search indexes com o nome do banco de dados e da coleção.

1curl --user "{PUBLIC-KEY}:{PRIVATE-KEY}" --digest \
2 --header "Accept: application/json" \
3 --include \
4 --request GET "https://cloud.mongodb.com/api/atlas/v2/groups/{groupId}/clusters/{clusterName}/search/indexes/{databaseName}/{collectionName}"

Para saber mais sobre a sintaxe e os parâmetros do endpoint, consulte Retornar todos os índices do Atlas Search para uma coleção.

Para recuperar um índice do Atlas Vector Search para uma coleção usando a API Atlas Administration, envie uma solicitação GET para o ponto de extremidade do Atlas Search indexes com o ID exclusivo ou o nome do índice (linha 4) a ser recuperado.

1curl --user "{PUBLIC-KEY}:{PRIVATE-KEY}" --digest \
2 --header "Accept: application/json" \
3 --include \
4 --request GET "https://cloud.mongodb.com/api/atlas/v2/groups/{groupId}/clusters/{clusterName}/search/indexes/{indexId} | https://cloud.mongodb.com/api/atlas/v2/groups/{groupId}/clusters/{clusterName}/search/indexes/{databaseName}/{collectionName}/{indexName|indexId}"

Para saber mais sobre a sintaxe e os parâmetros do endpoint, veja como Obter um pelo nome e Obter um pelo ID.

Para retornar índices do Atlas Vector Search para uma coleção usando o Atlas CLI, execute as seguintes etapas:

1
clusterName
Nome do cluster do Atlas.
db
Nome do banco de dados no cluster do Atlas que contém sua coleção indexada.
collection
O nome da coleção indexada no banco de dados.
projectId
O identificador exclusivo do projeto.
2
atlas clusters search indexes list --clusterName [cluster_name] --db <db-name> --collection <collection-name>

No comando, substitua os seguintes valores de espaço reservado:

  • cluster-name - o nome do cluster do Atlas que contém a coleção indexada.

  • db-name - o nome do banco de dados que contém a coleção para a qual você deseja recuperar os índices.

  • collection-name - o nome da coleção para a qual você deseja recuperar os índices.

Para saber mais sobre a sintaxe e os parâmetros do comando, consulte a documentação do Atlas CLI para o comando atlas clusters search indexes list.

1
  1. Se ainda não tiver sido exibido, selecione a organização que contém seu projeto no menu Organizations na barra de navegação.

  2. Se ainda não estiver exibido, selecione o projeto desejado no menu Projects na barra de navegação.

  3. Se ainda não estiver exibido, clique em Clusters na barra lateral.

    A página Clusters é exibida.

2

Você pode acessar a página do Atlas Search pela barra lateral, pelo Data Explorer ou pela página de detalhes do cluster.

  1. Na barra lateral, clique em Atlas Search sob o título Services.

  2. No menu suspenso Select data source, selecione seu cluster e clique em Go to Atlas Search.

    A página Atlas Search é exibida.

  1. Clique no botão Browse Collections para o seu cluster.

  2. Expanda o banco de dados e selecione a coleção.

  3. Clique na guia Search Indexes da coleção.

    A página Atlas Search é exibida.

  1. Clique no nome do seu cluster.

  2. Clique na aba Atlas Search.

    A página Atlas Search é exibida.

A página exibe os seguintes detalhes para os índices na página:

Nome
Etiqueta que identifica o índice.
Tipo de índice

Etiqueta que indica um índice de pesquisa do Atlas Search ou do Atlas Vector Search. Os valores incluem:

  • search para índices do Atlas Search.

  • vectorSearch para índice de pesquisa do Atlas Vector Search.

Campos do índice
Lista que contém os campos que este índice indexa.
Status
O estado atual do índice no nó primário do cluster. Para valores válidos, consulte Status do índice.
Tamanho
Tamanho do índice no nó primário.
Documentos
Número de documentos indexados do número total de documentos na collection.
Ações

ação que você pode realizar no índice. Você pode:

Você não pode executar queries na Search Tester UI em relação a índices do vectorSearch tipo. Se você clicar no Query botão, o Atlas Vector Search exibirá uma amostra $vectorSearch que você pode copiar, modificar e executar na UI do Atlas e utilizando outros clientes suportados.

Para visualizar um índice do Atlas Vector Search para uma coleção usando mongosh, execute as seguintes etapas:

1

Para saber mais, consulte Conectar via mongosh.

2
3

O método db.collection.getSearchIndexes() tem a seguinte sintaxe:

1db.<collectionName>.getSearchIndexes( "<index-name>" );

Para visualizar um índice do Atlas Vector Search para uma coleção usando o driver Go do MongoDB v1.16.0 ou posterior, execute as seguintes etapas:

1
1package main
2
3import (
4 "context"
5 "encoding/json"
6 "fmt"
7 "log"
8
9 "go.mongodb.org/mongo-driver/bson"
10 "go.mongodb.org/mongo-driver/mongo"
11 "go.mongodb.org/mongo-driver/mongo/options"
12)
13
14func main() {
15 ctx := context.Background()
16
17 // Replace the placeholder with your Atlas connection string
18 const uri = "<connectionString>"
19
20 // Connect to your Atlas cluster
21 clientOptions := options.Client().ApplyURI(uri)
22 client, err := mongo.Connect(ctx, clientOptions)
23 if err != nil {
24 log.Fatalf("failed to connect to the server: %v", err)
25 }
26 defer func() { _ = client.Disconnect(ctx) }()
27
28 // Set the namespace
29 coll := client.Database("<databaseName>").Collection("<collectionName>")
30
31 // Specify the options for the index to retrieve
32 indexName := "<indexName>"
33 opts := options.SearchIndexes().SetName(indexName)
34
35 // Get the index
36 cursor, err := coll.SearchIndexes().List(ctx, opts)
37 if err != nil {
38 log.Fatalf("failed to get the index: %v", err)
39 }
40
41 // Print the index details to the console as JSON
42 var results []bson.M
43 if err := cursor.All(ctx, &results); err != nil {
44 log.Fatalf("failed to unmarshal results to bson: %v", err)
45 }
46 res, err := json.Marshal(results)
47 if err != nil {
48 log.Fatalf("failed to marshal results to json: %v", err)
49 }
50 fmt.Println(string(res))
51}
2
<connectionString>
Sua connection string do Atlas. Para saber mais, consulte Conectar via Drivers.
<databaseName>
O banco de dados que contém a coleção.
<collectionName>
A collection para a qual você deseja recuperar os índices.
<indexName>
O nome do seu índice se você quiser recuperar um índice específico. Para retornar todos os índices da collection, omita este valor.
3
go run <file-name>.go

Para visualizar um índice do Atlas Vector Search para uma coleção usando o driver do MongoDB Java v5.2.0 ou posterior, execute as seguintes etapas:

1
1import com.mongodb.client.MongoClient;
2import com.mongodb.client.MongoClients;
3import com.mongodb.client.MongoCollection;
4import com.mongodb.client.MongoDatabase;
5import org.bson.Document;
6
7public class ViewVectorIndex {
8
9 public static void main(String[] args) {
10
11 // Replace the placeholder with your Atlas connection string
12 String uri = "<connectionString>";
13
14 // Connect to your Atlas cluster
15 try (MongoClient mongoClient = MongoClients.create(uri)) {
16
17 // Set the namespace
18 MongoDatabase database = mongoClient.getDatabase("<databaseName>");
19 MongoCollection<Document> collection = database.getCollection("<collectionName>");
20
21 // Specify the options for the index to retrieve
22 String indexName = "<indexName>";
23
24 // Get the index and print details to the console as JSON
25 try {
26 Document listSearchIndex = collection.listSearchIndexes().name(indexName).first();
27 if (listSearchIndex != null) {
28 System.out.println("Index found: " + listSearchIndex.toJson());
29 } else {
30 System.out.println("Index not found.");
31 }
32 } catch (Exception e) {
33 throw new RuntimeException("Error finding index: " + e);
34 }
35
36 } catch (Exception e) {
37 throw new RuntimeException("Error connecting to MongoDB: " + e);
38 }
39 }
40}
2
<connectionString>
Sua connection string do Atlas. Para saber mais, consulte Conectar via Drivers.
<databaseName>
O banco de dados que contém a coleção.
<collectionName>
A collection para a qual você deseja recuperar os índices.
<indexName>
O nome do seu índice se você quiser recuperar um índice específico. Para retornar todos os índices da collection, omita este valor.
3

No seu IDE, execute o arquivo para recuperar o índice especificado.

Para visualizar um índice do Atlas Vector Search para uma coleção usando o driver do MongoDB Node v6.6.0 ou posterior, execute as seguintes etapas:

1
1const { MongoClient } = require("mongodb");
2
3// connect to your Atlas deployment
4const uri = "<connectionString>";
5
6const client = new MongoClient(uri);
7
8async function run() {
9 try {
10 const database = client.db("<databaseName>");
11 const collection = database.collection("<collectionName>");
12
13 // run the helper method
14 const result = await collection.listSearchIndexes("<indexName>").toArray();
15 console.log(result);
16 } finally {
17 await client.close();
18 }
19}
20run().catch(console.dir);
2
<connectionString>
Sua connection string do Atlas. Para saber mais, consulte Conectar via Drivers.
<databaseName>
O banco de dados que contém a coleção.
<collectionName>
A collection para a qual você deseja recuperar os índices.
<indexName>
O nome do seu índice se você quiser recuperar um índice específico. Para retornar todos os índices da collection, omita este valor.
3
node <file-name>.js

Para visualizar os índices do Atlas Vector Search para uma coleção usando o driver PyMongo v4.7 ou posterior, execute as seguintes etapas:

1
1from pymongo.mongo_client import MongoClient
2
3# Connect to your Atlas deployment
4uri = "<connectionString>"
5client = MongoClient(uri)
6
7# Access your database and collection
8database = client["<databaseName>"]
9collection = database["<collectionName>"]
10
11# Get a list of the collection's search indexes and print them
12cursor = collection.list_search_indexes()
13for index in cursor:
14 print(index)

Para saber mais, consulte o método list_search_indexes().

2
<connectionString>
Sua connection string do Atlas. Para saber mais, consulte Conectar via Drivers.
<databaseName>
O nome do banco de dados que contém a coleção.
<collectionName>
O nome da collection.
3
python <file-name>.py

Você pode alterar a definição do índice de um índice existente do Atlas Atlas Vector Search na IU do Atlas , API de Administração do Atlas CLI do Atlas , mongosh ou um driver do MongoDB compatível. Você não pode renomear um índice ou alterar o tipo de índice. Se você precisar alterar um nome ou tipo de índice, deverá criar um novo índice e excluir o antigo.

Importante

Depois que você edita um índice, o Atlas Vector Search o reconstroe. Durante a reconstrução do índice, você pode continuar a executar queries de pesquisa vetorial usando a definição antiga do índice. Quando a reconstrução do índice termina, o índice antigo é automaticamente substituído. Este processo segue o mesmo processo dos índices padrão do Atlas Search.

Para saber mais, consulte Criar e atualizar um índice de pesquisa do Atlas.

Você deve ter a função Project Search Index Editor ou superior para editar um índice do Atlas Vector Search.

Observação

Você pode usar o mongosh comando ou os métodos assistente do driver para editar índices do Atlas Search em todas as camadas do Atlas cluster. Para obter uma lista de versões de driver compatíveis, consulte Clientes compatíveis.


➤ Use o menu suspenso Selecione seu idioma para selecionar o cliente que deseja usar para editar seu índice.


Para editar um índice do Atlas Vector Search para uma coleção usando a API Atlas Administration, envie uma solicitação PATCH para o endpoint do Atlas Search indexes com o ID exclusivo ou o nome do índice (linha 4) a ser editado.

1curl --user "{PUBLIC-KEY}:{PRIVATE-KEY}" --digest --include \
2 --header "Accept: application/json" \
3 --header "Content-Type: application/json" \
4 --request PATCH "https://cloud.mongodb.com/api/atlas/v2/groups/{groupId}/clusters/{clusterName}/search/indexes/{indexId} | https://cloud.mongodb.com/api/atlas/v2/groups/{groupId}/clusters/{clusterName}/search/indexes/{databaseName}/{collectionName}/{indexName|indexId}" \
5 --data'
6 {
7 "database": "<name-of-database>",
8 "collectionName": "<name-of-collection>",
9 "type": "vectorSearch",
10 "name": "<index-name>",
11 "definition": {
12 "fields":[
13 {
14 "type": "vector",
15 "path": <field-to-index>,
16 "numDimensions": <number-of-dimensions>,
17 "similarity": "euclidean | cosine | dotProduct"
18 },
19 {
20 "type": "filter",
21 "path": "<field-to-index>"
22 },
23 ...
24 }
25 ]
26 }'

Para saber mais sobre a sintaxe e os parâmetros dos pontos de extremidade, consulte Atualizar um por nome e Atualizar um por ID.

Para processar um índice do Atlas Vector Search para uma coleção usando o Atlas CLI, execute as seguintes etapas:

1

A definição do seu índice deve se assemelhar ao seguinte formato:

1{
2 "database": "<name-of-database>",
3 "collectionName": "<name-of-collection>",
4 "type": "vectorSearch",
5 "name": "<index-name>",
6 "fields":[
7 {
8 "type": "vector",
9 "path": "<field-to-index>",
10 "numDimensions": <number-of-dimensions>,
11 "similarity": "euclidean | cosine | dotProduct"
12 },
13 {
14 "type": "filter",
15 "path": "<field-to-index>"
16 },
17 ...
18 ]
19}
2
<name-of-database>
Banco de dados que contém a collection para a qual você deseja criar o índice.
<name-of-collection>
Coleção para a qual você deseja criar o índice.
<index-name>
Nome do seu índice. Se você omitir o nome do índice, o Atlas Vector Search nomeará o índice vector_index.
<number-of-dimensions>
Número de dimensões vetoriais que o Atlas Vector Search impõe no momento do índice e no momento da query.
<field-to-index>
Campos de vetor e filtro para indexar.
3
atlas clusters search indexes update <indexId> --clusterName [cluster_name] --file [vector-_index].json

No comando, substitua os seguintes valores de espaço reservado:

  • cluster_name - o nome do cluster do Atlas que contém a coleção para a qual você deseja atualizar o índice.

  • vector_index - o nome do arquivo JSON que contém a definição de índice modificada para o índice do Atlas Vector Search.

Para saber mais sobre a sintaxe e os parâmetros do comando, consulte a documentação do Atlas CLI para o comando atlas clusters search indexes update.

1
  1. Se ainda não tiver sido exibido, selecione a organização que contém seu projeto no menu Organizations na barra de navegação.

  2. Se ainda não estiver exibido, selecione o projeto desejado no menu Projects na barra de navegação.

  3. Se ainda não estiver exibido, clique em Clusters na barra lateral.

    A página Clusters é exibida.

2

Você pode acessar a página do Atlas Search pela barra lateral, pelo Data Explorer ou pela página de detalhes do cluster.

  1. Na barra lateral, clique em Atlas Search sob o título Services.

  2. No menu suspenso Select data source, selecione seu cluster e clique em Go to Atlas Search.

    A página Atlas Search é exibida.

  1. Clique no botão Browse Collections para o seu cluster.

  2. Expanda o banco de dados e selecione a coleção.

  3. Clique na guia Search Indexes da coleção.

    A página Atlas Search é exibida.

  1. Clique no nome do seu cluster.

  2. Clique na aba Atlas Search.

    A página Atlas Search é exibida.

3
  1. Localize o índice de tipo vectorSearch para editar.

  2. Clique em Edit Index no menu suspenso Actions desse índice.

  3. Revise as definições de configuração atuais e edite-as conforme necessário.

    Para saber mais sobre os campos em um índice de pesquisa do Atlas Vector Search, consulte Como indexar campos para o Vector Search.

  4. Clique em Save para aplicar as alterações.

O status do índice muda de Active para Building. Nesse estado, você pode continuar usando o índice antigo porque o Atlas Vector Search não exclui o índice antigo até que o índice atualizado esteja pronto para uso. Após o status retornar para Active, o índice modificado estará pronto para ser utilizado.

Para processar um índice do Atlas Vector Search para uma coleção usando mongosh, execute as seguintes etapas:

1

Para saber mais, consulte Conectar via mongosh.

2
3

O método db.collection.updateSearchIndex() tem a seguinte sintaxe:

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

Para atualizar um índice do Atlas Vector Search para uma coleção usando o driver Go do MongoDB v1.16.0 ou posterior, execute as seguintes etapas:

1
1package main
2
3import (
4 "context"
5 "fmt"
6 "log"
7
8 "go.mongodb.org/mongo-driver/mongo"
9 "go.mongodb.org/mongo-driver/mongo/options"
10)
11
12func main() {
13 ctx := context.Background()
14
15 // Replace the placeholder with your Atlas connection string
16 const uri = "<connection-string>"
17
18 // Connect to your Atlas cluster
19 clientOptions := options.Client().ApplyURI(uri)
20 client, err := mongo.Connect(ctx, clientOptions)
21 if err != nil {
22 log.Fatalf("failed to connect to the server: %v", err)
23 }
24 defer func() { _ = client.Disconnect(ctx) }()
25
26 // Set the namespace
27 coll := client.Database("<databaseName>").Collection("<collectionName>")
28 indexName := "<indexName>"
29
30 type vectorDefinitionField struct {
31 Type string `bson:"type"`
32 Path string `bson:"path"`
33 NumDimensions int `bson:"numDimensions"`
34 Similarity string `bson:"similarity"`
35 }
36
37 type vectorDefinition struct {
38 Fields []vectorDefinitionField `bson:"fields"`
39 }
40
41 definition := vectorDefinition{
42 Fields: []vectorDefinitionField{{
43 Type: "vector",
44 Path: "<fieldToIndex>",
45 NumDimensions: <numberOfDimensions>,
46 Similarity: "euclidean | cosine | dotProduct"}},
47 }
48 err = coll.SearchIndexes().UpdateOne(ctx, indexName, definition)
49
50 if err != nil {
51 log.Fatalf("failed to update the index: %v", err)
52 }
53
54 fmt.Println("Successfully updated the search index")
55}
2
<connectionString>
Connection string do Atlas. Para saber mais, consulte Conectar via drivers.
<databaseName>
Banco de dados que contém a collection para a qual você deseja criar o índice.
<collectionName>
Coleção para a qual você deseja criar o índice.
<indexName>
Nome do seu índice. Se você omitir o nome do índice, o Atlas Search nomeará o índice vector_index.
<numberOfDimensions>
Número de dimensões vetoriais que o Atlas Vector Search impõe no momento do índice e no momento da query.
<fieldToIndex>
Campos de vetor e filtro para indexar.
3
go run <file-name>.go

Para editar um índice do Atlas Vector Search para uma coleção usando o driver Java do MongoDB v5.2.0 ou posterior, execute as seguintes etapas:

1
1import com.mongodb.client.MongoClient;
2import com.mongodb.client.MongoClients;
3import com.mongodb.client.MongoCollection;
4import com.mongodb.client.MongoDatabase;
5import org.bson.Document;
6import org.bson.conversions.Bson;
7
8import java.util.Collections;
9
10public class EditVectorIndex {
11
12 public static void main(String[] args) {
13
14 // Replace the placeholder with your Atlas connection string
15 String uri = "<connectionString>";
16
17 // Connect to your Atlas cluster
18 try (MongoClient mongoClient = MongoClients.create(uri)) {
19
20 // Set the namespace
21 MongoDatabase database = mongoClient.getDatabase("<databaseName>");
22 MongoCollection<Document> collection = database.getCollection("<collectionName>");
23
24 // Define the index changes
25 String indexName = "<indexName>";
26 Bson definition = new Document(
27 "fields",
28 Collections.singletonList(
29 new Document("type", "vector")
30 .append("path", "<fieldToIndex>")
31 .append("numDimensions", <numberOfDimensions>)
32 .append("similarity", "euclidean | cosine | dotProduct")
33 )
34 );
35
36 // Update the index
37 try {
38 collection.updateSearchIndex(indexName, definition);
39 System.out.println("Successfully updated the index");
40 } catch (Exception e) {
41 throw new RuntimeException("Error creating index: " + e);
42 mongoClient.close();
43 }
44
45 } catch (Exception e) {
46 throw new RuntimeException("Error connecting to MongoDB: " + e);
47 }
48 }
49}
2
<connectionString>
Connection string do Atlas. Para saber mais, consulte Conectar via drivers.
<databaseName>
Banco de dados que contém a collection para a qual você deseja criar o índice.
<collectionName>
Coleção para a qual você deseja criar o índice.
<indexName>
Nome do seu índice. Se você omitir o nome do índice, o Atlas Search nomeará o índice vector_index.
<numberOfDimensions>
Número de dimensões vetoriais que o Atlas Vector Search impõe no momento do índice e no momento da query.
<fieldToIndex>
Campos de vetor e filtro para indexar.
3

No seu IDE, execute o arquivo para atualizar o índice com suas alterações.

Para atualizar um índice do Atlas Vector Search para uma coleção usando o driver MongoDB Node v6.6.0 ou posterior, execute as seguintes etapas:

1
1const { MongoClient } = require("mongodb");
2
3// connect to your Atlas deployment
4const uri = "<connection-string>";
5
6const client = new MongoClient(uri);
7
8async function run() {
9 try {
10 const database = client.db("<databaseName>");
11 const collection = database.collection("<collectionName>");
12
13 // define your Atlas Search index
14 const index = {
15 name: "<indexName>",
16 type: "vectorSearch",
17 //updated search index definition
18 definition: {
19 "fields": [
20 {
21 "type": "vector",
22 "numDimensions": <numberOfDimensions>,
23 "path": "<field-to-index>",
24 "similarity": "euclidean | cosine | dotProduct"
25 },
26 {
27 "type": "filter",
28 "path": "<fieldToIndex>"
29 },
30 ...
31 ]
32 }
33 }
34
35 // run the helper method
36 await collection.updateSearchIndex("<index-name>", index);
37 } finally {
38 await client.close();
39 }
40}
41run().catch(console.dir);
2
<connectionString>
Connection string do Atlas. Para saber mais, consulte Conectar via drivers.
<databaseName>
Banco de dados que contém a collection para a qual você deseja criar o índice.
<collectionName>
Coleção para a qual você deseja criar o índice.
<indexName>
Nome do seu índice. Se você omitir o nome do índice, o Atlas Search nomeará o índice vector_index.
<numberOfDimensions>
Número de dimensões vetoriais que o Atlas Vector Search impõe no momento do índice e no momento da query.
<fieldToIndex>
Campos de vetor e filtro para indexar.
3
node <file-name>.js

Para atualizar um índice do Atlas Vector Search para uma coleção usando o driver PyMongo v4.7 ou posterior, execute as seguintes etapas:

1
1from pymongo.mongo_client import MongoClient
2
3# Connect to your Atlas deployment
4uri = "<connectionString>"
5client = MongoClient(uri)
6
7# Access your database and collection
8database = client["<databaseName>"]
9collection = database["<collectionName>"]
10
11definition = {
12 "fields": [
13 {
14 "type": "vector",
15 "numDimensions": <numberofDimensions>,
16 "path": "<fieldToIndex>",
17 "similarity": "euclidean | cosine | dotProduct"
18 },
19 {
20 "type": "filter",
21 "path": "<fieldToIndex>"
22 },
23 ...
24 ]
25}
26
27# Update your search index
28collection.update_search_index("<indexName>", definition)

Para saber mais, consulte update_search_index() método.

2
<connectionString>
Connection string do Atlas. Para saber mais, consulte Conectar via drivers.
<databaseName>
Banco de dados que contém a collection para a qual você deseja criar o índice.
<collectionName>
Coleção para a qual você deseja criar o índice.
<indexName>
Bame do seu índice. Se você omitir o nome do índice, o Atlas Search nomeará o índice como vector_index.
<numberOfDimensions>
Número de dimensões vetoriais que o Atlas Vector Search impõe no momento do índice e no momento da query.
<fieldToIndex>
Campos de vetor e filtro para indexar.
3
python <file-name>.py

Você pode excluir um índice do Atlas Vector Search a qualquer momento na interface do usuário do Atlas, na Administration API do Atlas, na Atlas CLI, mongosh ou em um driver MongoDB compatível.

Você deve ter a função Project Search Index Editor ou superior para excluir um índice do Atlas Vector Search.

Observação

Você pode usar o mongosh comando ou os métodos assistente do driver para excluir índices do Atlas Search em todas as camadas do Atlas cluster. Para obter uma lista de versões de driver compatíveis, consulte Clientes compatíveis.


➤ Use o menu suspenso Selecione seu idioma para selecionar o cliente que deseja usar para excluir seu índice.


Para excluir um índice do Atlas Vector Search de uma coleção usando a Atlas Administration API, envie uma solicitação DELETE para o endpoint indexes do Atlas Search com o ID exclusivo ou o nome do índice a ser excluído.

1curl --user "{PUBLIC-KEY}:{PRIVATE-KEY}" --digest \
2 --header "Accept: application/json" \
3 --include \
4 --request DELETE "https://cloud.mongodb.com/api/atlas/v2/groups/{groupId}/clusters/{clusterName}/search/indexes/{indexId} | https://cloud.mongodb.com/api/atlas/v2/groups/{groupId}/clusters/{clusterName}/search/indexes/{databaseName}/{collectionName}/{indexName|indexId}"

Para saber mais sobre a sintaxe e os parâmetros do endpoint, consulte Remover um índice de pesquisa por nome e Remover um índice de pesquisa por ID.

Para excluir um índice do Atlas Vector Search para uma coleção usando o Atlas CLI, execute as seguintes etapas:

1
<indexId>
O identificador exclusivo do índice a ser excluído.
<clusterName>
Nome do cluster do Atlas.
<projectId>
O identificador exclusivo do projeto.
2
atlas clusters search indexes delete <indexId> [options]

No comando, substitua o valor de espaço reservado indexId pelo identificador exclusivo do índice a ser excluído.

Para saber mais sobre a sintaxe e os parâmetros do comando, consulte a documentação do Atlas CLI para o comando atlas clusters search indexes delete .

1
  1. Se ainda não tiver sido exibido, selecione a organização que contém seu projeto no menu Organizations na barra de navegação.

  2. Se ainda não estiver exibido, selecione o projeto desejado no menu Projects na barra de navegação.

  3. Se ainda não estiver exibido, clique em Clusters na barra lateral.

    A página Clusters é exibida.

2

Você pode acessar a página do Atlas Search pela barra lateral, pelo Data Explorer ou pela página de detalhes do cluster.

  1. Na barra lateral, clique em Atlas Search sob o título Services.

  2. No menu suspenso Select data source, selecione seu cluster e clique em Go to Atlas Search.

    A página Atlas Search é exibida.

  1. Clique no botão Browse Collections para o seu cluster.

  2. Expanda o banco de dados e selecione a coleção.

  3. Clique na guia Search Indexes da coleção.

    A página Atlas Search é exibida.

  1. Clique no nome do seu cluster.

  2. Clique na aba Atlas Search.

    A página Atlas Search é exibida.

3
  1. Localize o índice de tipo vectorSearch a ser excluído.

  2. Clique em Delete Index no menu suspenso Actions desse índice.

  3. Clique em Drop Index na janela de confirmação.

Para excluir um índice do Atlas Vector Search de uma coleção usando mongosh, execute as seguintes etapas:

1

Para saber mais, consulte Conectar via mongosh.

2
3

O método db.collection.dropSearchIndex() tem a seguinte sintaxe:

1db.<collectionName>.dropSearchIndex( "<index-name>" );

Para excluir um índice do Atlas Vector Search para uma coleção usando o driver do MongoDB Go v1.16.0 ou posterior, execute as seguintes etapas:

1
1package main
2
3import (
4 "context"
5 "fmt"
6 "log"
7
8 "go.mongodb.org/mongo-driver/mongo"
9 "go.mongodb.org/mongo-driver/mongo/options"
10)
11
12func main() {
13 ctx := context.Background()
14
15 // Replace the placeholder with your Atlas connection string
16 const uri = "<connectionString>"
17
18 // Connect to your Atlas cluster
19 clientOptions := options.Client().ApplyURI(uri)
20 client, err := mongo.Connect(ctx, clientOptions)
21 if err != nil {
22 log.Fatalf("failed to connect to the server: %v", err)
23 }
24 defer func() { _ = client.Disconnect(ctx) }()
25
26 // Set the namespace
27 coll := client.Database("<databaseName>").Collection("<collectionName>")
28 indexName := "<indexName>"
29
30 err = coll.SearchIndexes().DropOne(ctx, indexName)
31 if err != nil {
32 log.Fatalf("failed to delete the index: %v", err)
33 }
34
35 fmt.Println("Successfully deleted the Vector Search index")
36}
2
<connectionString>
Sua connection string do Atlas. Para saber mais, consulte Conectar via Drivers.
<databaseName>
O banco de dados que contém a collection para a qual você deseja criar o índice.
<collectionName>
A collection para a qual você deseja criar o índice.
<indexName>
O nome do seu índice. Se você omitir o nome do índice, o Atlas Search nomeará o índice vector_index.
3
go run <file-name>.go

Para excluir um índice do Atlas Vector Search para uma coleção usando o driver do MongoDB Java v5.2.0 ou posterior, execute as seguintes etapas:

1
1import com.mongodb.client.MongoClient;
2import com.mongodb.client.MongoClients;
3import com.mongodb.client.MongoCollection;
4import com.mongodb.client.MongoDatabase;
5import org.bson.Document;
6
7public class DeleteIndex {
8
9 public static void main(String[] args) {
10
11 // Replace the placeholder with your Atlas connection string
12 String uri = "<connectionString>";
13
14 // Connect to your Atlas cluster
15 try (MongoClient mongoClient = MongoClients.create(uri)) {
16
17 // Set the namespace
18 MongoDatabase database = mongoClient.getDatabase("<databaseName>");
19 MongoCollection<Document> collection = database.getCollection("<collectionName>");
20
21 // Specify the index to delete
22 String indexName = "<indexName>";
23
24 try {
25 collection.dropSearchIndex(indexName);
26 } catch (Exception e) {
27 throw new RuntimeException("Error deleting index: " + e);
28 }
29
30 } catch (Exception e) {
31 throw new RuntimeException("Error connecting to MongoDB: " + e);
32 }
33 }
34}
2
<connectionString>
Sua connection string do Atlas. Para saber mais, consulte Conectar via Drivers.
<databaseName>
O banco de dados que contém a collection para a qual você deseja criar o índice.
<collectionName>
A collection para a qual você deseja criar o índice.
<indexName>
O nome do seu índice. Se você omitir o nome do índice, o Atlas Search nomeará o índice vector_index.
3

No seu IDE, execute o arquivo para excluir o índice especificado.

Para excluir um índice do Atlas Vector Search para uma coleção usando o driver do MongoDB Node v6.6.0 ou posterior, execute as seguintes etapas:

1
1const { MongoClient } = require("mongodb");
2
3// connect to your Atlas deployment
4const uri = "<connectionString>";
5
6const client = new MongoClient(uri);
7
8async function run() {
9 try {
10 const database = client.db("<databaseName>");
11 const collection = database.collection("<collectionName>");
12
13 // run the helper method
14 await collection.dropSearchIndex("<indexName>");
15
16 } finally {
17 await client.close();
18 }
19}
20run().catch(console.dir);
2
<connectionString>
Sua connection string do Atlas. Para saber mais, consulte Conectar via Drivers.
<databaseName>
O banco de dados que contém a collection para a qual você deseja criar o índice.
<collectionName>
A collection para a qual você deseja criar o índice.
<indexName>
O nome do seu índice. Se você omitir o nome do índice, o Atlas Search nomeará o índice vector_index.
3
node <file-name>.js

Para excluir um índice do Atlas Vector Search para uma coleção usando o driver PyMongo v4.7 ou posterior, execute as seguintes etapas:

1
1from pymongo.mongo_client import MongoClient
2
3# Connect to your Atlas deployment
4uri = "<connectionString>"
5client = MongoClient(uri)
6
7# Access your database and collection
8database = client["<databaseName>"]
9collection = database["<collectionName>"]
10
11# Delete your search index
12collection.drop_search_index("<indexName>")

Para saber mais, consulte drop_search_index() método.

2
<connectionString>
Sua connection string do Atlas. Para saber mais, consulte Conectar via Drivers.
<databaseName>
O nome do banco de dados que contém a coleção.
<collectionName>
O nome da collection.
<indexName>
O nome do índice a ser excluído.
3
python <file-name>.py

Quando você cria o índice do Atlas Vector Search, a coluna Status mostra o estado atual do índice de pesquisa 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 queries 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.

Voltar

Ingerir vetores quantificados