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
.
Considerações
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 vector
subtipo float32
, int1
ou int8
para armazenamento eficiente em seu cluster do Atlas . Para saber mais, consulte como converter suas incorporações em vetores BSON.
Observação
O suporte do Atlas Vector Search para o seguinte está disponível como um recurso de visualização:
Ingestão de BSON BinData
vector
subtipoint1
.Quantização escalar automática.
Quantização binária automática.
Clientes aceitos
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 :
Sintaxe
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 "quantization": "none | scalar | binary" 9 }, 10 { 11 "type": "filter", 12 "path": "<field-to-index>" 13 }, 14 ... 15 ] 16 }
Campos do índice do Atlas Vector Search
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
|
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: |
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
Você pode definir este campo somente para campos do tipo |
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
Para saber mais, consulte Sobre as funções de similaridade. |
fields.quantization | string | Opcional | Tipo de quantização vetorial automática para seus vetores. Você pode especificar o tipo de quantização para aplicar em seus vetores. Use essa configuração somente se suas incorporações forem
Se a precisão for crítica, selecione Para saber mais, consulte Quantização vetorial. |
Sobre o tipo vector
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
Subtipofloat32
BSON BinData
vector
Subtipoint1
BSON BinData
vector
Subtipoint8
Observação
Para saber mais sobre como gerar vetores BSON BinData vector
subtipo float32
ou vector
subtipo int1
ou int8
para seus dados, consulte Como alimentar vetores pré-quantizados.
O suporte do Atlas Vector Search para o seguinte está disponível como um recurso de visualização:
Ingestão de BSON BinData
vector
subtipoint1
.Quantização escalar automática.
Quantização binária automática.
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 "quantization": "none | scalar | binary" 9 }, 10 ... 11 ] 12 }
Sobre as funções de similaridade
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 comcosine
. Para medir a similaridade do cosseno, recomendamos normalizar seus vetores e usardotProduct
.dotProduct
- mede a similaridade comocosine
, mas leva em consideração a magnitude do vetor. Se você normalizar a magnitude,cosine
edotProduct
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.
A tabela a seguir mostra as funções de similaridade para os vários tipos:
Tipo de incorporação do vetor | euclidean | consine | dotProduct |
---|---|---|---|
binData(int1) | √ | ||
binData(int8) | √ | √ | √ |
binData(float32) | √ | √ | √ |
array(float32) | √ | √ | √ |
Para ingestão de vetores.
Para quantização escalar ou binária automática.
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.
Sobre o tipo filter
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
.
Crie um índice do Atlas Vector Search
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.
Pré-requisitos
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 superiorUma collection para a qual criar o índice do Atlas Vector Search
Acesso necessário
Você precisa da função Project Data Access Admin
ou superior para criar e gerenciar índices do Atlas Vector Search.
Limitações do índice
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+
.
Procedimento
➤ 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.
1 curl --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 .
1 curl --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.
1 curl --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:
Crie um arquivo .json
e defina o índice no arquivo.
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
.
Substitua os seguintes valores nos espaços reservados e salve o arquivo.
<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 }
Execute o seguinte comando para criar o índice.
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.
No Atlas, VáGo para a Clusters página do seu projeto.
Se ainda não tiver sido exibido, selecione a organização que contém seu projeto no menu Organizations na barra de navegação.
Se ainda não estiver exibido, selecione o projeto desejado no menu Projects na barra de navegação.
Se ainda não estiver exibido, clique em Clusters na barra lateral.
A página Clusters é exibida.
Acesse a página do Atlas Search do seu cluster.
Você pode acessar a página do Atlas Search pela barra lateral, pelo Data Explorer ou pela página de detalhes do cluster.
Na barra lateral, clique em Atlas Search sob o título Services.
No menu suspenso Select data source, selecione seu cluster e clique em Go to Atlas Search.
A página Atlas Search é exibida.
Clique no botão Browse Collections para o seu cluster.
Expanda o banco de dados e selecione a coleção.
Clique na guia Search Indexes da coleção.
A página Atlas Search é exibida.
Clique no nome do seu cluster.
Clique na aba Atlas Search.
A página Atlas Search é exibida.
Insira o Index Name e defina o Database and Collection.
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.
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çãoembedded_movies
.
Especifique uma definição de índice.
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 }
Verifique o status.
O índice recém-criado aparece na aba Atlas Search. Enquanto o índice está construindo, o campo Status lê Build in Progress. Quando o índice terminar de construir, o campo Status lê Active.
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:
Conecte-se ao cluster do Atlas usando mongosh
.
Para saber mais, consulte Conectar via mongosh
.
Execute o método db.collection.createSearchIndex()
.
O método db.collection.createSearchIndex()
tem a seguinte sintaxe:
1 db.<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 .
1 db.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.
1 db.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:
Crie um arquivo .go
e defina o índice no arquivo.
1 package main 2 3 import ( 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 13 func 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
.
Substitua os seguintes valores e salve o arquivo.
<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.
1 package main 2 3 import ( 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 14 func 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.
1 package main 2 3 import ( 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 14 func 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 }
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:
Crie um arquivo .java
e defina o índice no arquivo.
1 import com.mongodb.client.ListSearchIndexesIterable; 2 import com.mongodb.client.MongoClient; 3 import com.mongodb.client.MongoClients; 4 import com.mongodb.client.MongoCollection; 5 import com.mongodb.client.MongoCursor; 6 import com.mongodb.client.MongoDatabase; 7 import com.mongodb.client.model.SearchIndexModel; 8 import com.mongodb.client.model.SearchIndexType; 9 import org.bson.Document; 10 import org.bson.conversions.Bson; 11 12 import java.util.Arrays; 13 import java.util.Collections; 14 import java.util.List; 15 16 public 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 }
Substitua os seguintes valores e salve o arquivo.
<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 tipovector
e os camposgenres
eyear
como o tipofilter
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çõestext-embedding-ada-002
do OpenAI.A definição de índice especifica
1536
dimensões vetoriais e mede a similaridade usando a distânciaeuclidean
.
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>
.
1 import com.mongodb.client.ListSearchIndexesIterable; 2 import com.mongodb.client.MongoClient; 3 import com.mongodb.client.MongoClients; 4 import com.mongodb.client.MongoCollection; 5 import com.mongodb.client.MongoCursor; 6 import com.mongodb.client.MongoDatabase; 7 import com.mongodb.client.model.SearchIndexModel; 8 import com.mongodb.client.model.SearchIndexType; 9 import org.bson.Document; 10 import org.bson.conversions.Bson; 11 12 import java.util.Collections; 13 import java.util.List; 14 15 public 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>
.
1 import com.mongodb.client.ListSearchIndexesIterable; 2 import com.mongodb.client.MongoClient; 3 import com.mongodb.client.MongoClients; 4 import com.mongodb.client.MongoCollection; 5 import com.mongodb.client.MongoCursor; 6 import com.mongodb.client.MongoDatabase; 7 import com.mongodb.client.model.SearchIndexModel; 8 import com.mongodb.client.model.SearchIndexType; 9 import org.bson.Document; 10 import org.bson.conversions.Bson; 11 12 import java.util.Arrays; 13 import java.util.Collections; 14 import java.util.List; 15 16 public 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 }
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:
Crie um arquivo .js
e defina o índice no arquivo.
1 const { MongoClient } = require("mongodb"); 2 3 // connect to your Atlas deployment 4 const uri = "<connectionString>"; 5 6 const client = new MongoClient(uri); 7 8 async 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 } 57 run().catch(console.dir);
Exemplo
Crie um arquivo denominado vector-index.js
.
Substitua os seguintes valores e salve o arquivo.
<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.
1 const { MongoClient } = require("mongodb"); 2 3 // connect to your Atlas deployment 4 const uri = "<connectionString>"; 5 6 const client = new MongoClient(uri); 7 8 async 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 } 53 run().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.
1 const { MongoClient } = require("mongodb"); 2 3 // connect to your Atlas deployment 4 const uri = "<connectionString>"; 5 6 const client = new MongoClient(uri); 7 8 async 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 } 61 run().catch(console.dir);
Para criar um índice do Atlas Vector Search para uma coleção usando o driver PyMongo v4.7 ou posterior, execute as seguintes etapas:
Crie um arquivo .py
e defina o índice no arquivo.
1 import pymongo 2 from pymongo.mongo_client import MongoClient 3 from pymongo.operations import SearchIndexModel 4 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 model, then create the search index 14 search_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 34 result = collection.create_search_index(model=search_index_model) 35 print("New search index named " + result + " is building.") 36 37 # Wait for initial sync to complete 38 print("Polling to check if the index is ready. This may take up to a minute.") 39 predicate=None 40 if predicate is None: 41 predicate = lambda index: index.get("queryable") is True 42 43 while True: 44 indices = list(collection.list_search_indexes(result)) 45 if len(indices) and predicate(indices[0]): 46 break 47 time.sleep(5) 48 print(result + " is ready for querying.") 49 50 client.close()
Para saber mais, consulte o create_search_index() método.
1 from pymongo.mongo_client import MongoClient 2 from pymongo.operations import SearchIndexModel 3 4 def 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
.
Substitua os seguintes valores e salve o arquivo.
<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.
1 from pymongo.mongo_client import MongoClient 2 from pymongo.operations import SearchIndexModel 3 import time 4 5 # Connect to your Atlas deployment 6 uri = "<connectionString>" 7 client = MongoClient(uri) 8 9 # Access your database and collection 10 database = client["sample_mflix"] 11 collection = database["embedded_movies"] 12 13 # Create your index model, then create the search index 14 search_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 29 result = collection.create_search_index(model=search_index_model) 30 print("New search index named " + result + " is building.") 31 # Wait for initial sync to complete 32 print("Polling to check if the index is ready. This may take up to a minute.") 33 predicate=None 34 if predicate is None: 35 predicate = lambda index: index.get("queryable") is True 36 37 while True: 38 indices = list(collection.list_search_indexes(name)) 39 if len(indices) and predicate(indices[0]): 40 break 41 time.sleep(5) 42 print(result + " is ready for querying.") 43 44 client.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.
1 from pymongo.mongo_client import MongoClient 2 from pymongo.operations import SearchIndexModel 3 import time 4 5 # Connect to your Atlas deployment 6 uri = "<connectionString>" 7 client = MongoClient(uri) 8 9 # Access your database and collection 10 database = client["sample_mflix"] 11 collection = database["embedded_movies"] 12 13 # Create your index model, then create the search index 14 search_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 37 result = collection.create_search_index(model=search_index_model) 38 print("New search index named " + result + " is building.") 39 # Wait for initial sync to complete 40 print("Polling to check if the index is ready. This may take up to a minute.") 41 predicate=None 42 if predicate is None: 43 predicate = lambda index: index.get("queryable") is True 44 45 while True: 46 indices = list(collection.list_search_indexes(result)) 47 if len(indices) and predicate(indices[0]): 48 break 49 time.sleep(5) 50 print(result + " is ready for querying.") 51 52 client.close()
Exibir um índice do Atlas Vector Search
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.
Acesso necessário
Você precisa do role Project Search Index Editor
ou superior para visualizar o índice de pesquisa do Atlas Vector Search.
Procedimento
➤ 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.
1 curl --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.
1 curl --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:
Execute o seguinte comando para recuperar os índices da coleção.
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.
No Atlas, váGo para a Clusters página do seu projeto.
Se ainda não tiver sido exibido, selecione a organização que contém seu projeto no menu Organizations na barra de navegação.
Se ainda não estiver exibido, selecione o projeto desejado no menu Projects na barra de navegação.
Se ainda não estiver exibido, clique em Clusters na barra lateral.
A página Clusters é exibida.
Acesse a página do Atlas Search do seu cluster.
Você pode acessar a página do Atlas Search pela barra lateral, pelo Data Explorer ou pela página de detalhes do cluster.
Na barra lateral, clique em Atlas Search sob o título Services.
No menu suspenso Select data source, selecione seu cluster e clique em Go to Atlas Search.
A página Atlas Search é exibida.
Clique no botão Browse Collections para o seu cluster.
Expanda o banco de dados e selecione a coleção.
Clique na guia Search Indexes da coleção.
A página Atlas Search é exibida.
Clique no nome do seu cluster.
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:
|
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 |
Para visualizar um índice do Atlas Vector Search para uma coleção usando mongosh
, execute as seguintes etapas:
Conecte-se ao cluster do Atlas usando mongosh
.
Para saber mais, consulte Conectar via mongosh
.
Execute o método db.collection.getSearchIndexes()
.
O método db.collection.getSearchIndexes()
tem a seguinte sintaxe:
1 db.<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:
Crie o arquivo .go
e use o método SearchIndexes().List()
para recuperar o índice.
1 package main 2 3 import ( 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 14 func 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 }
Substitua os seguintes valores e salve o arquivo.
<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. |
Para visualizar 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:
Crie um arquivo .java
e use o método listSearchIndexes()
para recuperar o índice.
1 import com.mongodb.client.MongoClient; 2 import com.mongodb.client.MongoClients; 3 import com.mongodb.client.MongoCollection; 4 import com.mongodb.client.MongoDatabase; 5 import org.bson.Document; 6 7 public 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 }
Substitua os seguintes valores e salve o arquivo.
<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. |
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:
Crie o arquivo .js
e use o método listSearchIndexes()
para recuperar o índice.
1 const { MongoClient } = require("mongodb"); 2 3 // connect to your Atlas deployment 4 const uri = "<connectionString>"; 5 6 const client = new MongoClient(uri); 7 8 async 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 } 20 run().catch(console.dir);
Substitua os seguintes valores e salve o arquivo.
<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. |
Para visualizar os índices do Atlas Vector Search para uma coleção usando o driver PyMongo v4.7 ou posterior, execute as seguintes etapas:
Crie um arquivo .py
e use o método list_search_indexes()
para recuperar os índices da coleção.
1 from pymongo.mongo_client import MongoClient 2 3 # Connect to your Atlas deployment 4 uri = "<connectionString>" 5 client = MongoClient(uri) 6 7 # Access your database and collection 8 database = client["<databaseName>"] 9 collection = database["<collectionName>"] 10 11 # Get a list of the collection's search indexes and print them 12 cursor = collection.list_search_indexes() 13 for index in cursor: 14 print(index)
Para saber mais, consulte o método list_search_indexes().
Substitua os seguintes valores e salve o arquivo.
<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. |
Editar um índice do Atlas Vector Search
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.
Acesso necessário
Você deve ter a função Project Search Index Editor
ou superior para editar um índice do Atlas Vector Search.
Procedimento
➤ 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.
1 curl --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:
Crie um arquivo .json
e defina as alterações no índice do arquivo.
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 }
Substitua os seguintes valores nos espaços reservados e salve o arquivo.
<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. |
Execute o seguinte comando para atualizar o índice.
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.
No Atlas, váGo para a Clusters página do seu projeto.
Se ainda não tiver sido exibido, selecione a organização que contém seu projeto no menu Organizations na barra de navegação.
Se ainda não estiver exibido, selecione o projeto desejado no menu Projects na barra de navegação.
Se ainda não estiver exibido, clique em Clusters na barra lateral.
A página Clusters é exibida.
Acesse a página do Atlas Search do seu cluster.
Você pode acessar a página do Atlas Search pela barra lateral, pelo Data Explorer ou pela página de detalhes do cluster.
Na barra lateral, clique em Atlas Search sob o título Services.
No menu suspenso Select data source, selecione seu cluster e clique em Go to Atlas Search.
A página Atlas Search é exibida.
Clique no botão Browse Collections para o seu cluster.
Expanda o banco de dados e selecione a coleção.
Clique na guia Search Indexes da coleção.
A página Atlas Search é exibida.
Clique no nome do seu cluster.
Clique na aba Atlas Search.
A página Atlas Search é exibida.
Editar o índice.
Localize o índice de tipo
vectorSearch
para editar.Clique em Edit Index no menu suspenso Actions desse índice.
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.
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:
Conecte-se ao cluster do Atlas usando mongosh
.
Para saber mais, consulte Conectar via mongosh
.
Execute o método db.collection.updateSearchIndex()
.
O método db.collection.updateSearchIndex()
tem a seguinte sintaxe:
1 db.<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:
Crie o arquivo go
e defina as alterações de índice no arquivo.
1 package main 2 3 import ( 4 "context" 5 "fmt" 6 "log" 7 8 "go.mongodb.org/mongo-driver/mongo" 9 "go.mongodb.org/mongo-driver/mongo/options" 10 ) 11 12 func 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 }
Substitua os seguintes valores e salve o arquivo.
<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. |
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:
Crie o arquivo .java
e defina as alterações de índice no arquivo.
1 import com.mongodb.client.MongoClient; 2 import com.mongodb.client.MongoClients; 3 import com.mongodb.client.MongoCollection; 4 import com.mongodb.client.MongoDatabase; 5 import org.bson.Document; 6 import org.bson.conversions.Bson; 7 8 import java.util.Collections; 9 10 public 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 }
Substitua os seguintes valores e salve o arquivo.
<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. |
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:
Crie o arquivo .js
e defina as alterações de índice no arquivo.
1 const { MongoClient } = require("mongodb"); 2 3 // connect to your Atlas deployment 4 const uri = "<connection-string>"; 5 6 const client = new MongoClient(uri); 7 8 async 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 } 41 run().catch(console.dir);
Substitua os seguintes valores e salve o arquivo.
<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. |
Para atualizar um índice do Atlas Vector Search para uma coleção usando o driver PyMongo v4.7 ou posterior, execute as seguintes etapas:
Crie o arquivo .py
e defina as alterações de índice no arquivo.
1 from pymongo.mongo_client import MongoClient 2 3 # Connect to your Atlas deployment 4 uri = "<connectionString>" 5 client = MongoClient(uri) 6 7 # Access your database and collection 8 database = client["<databaseName>"] 9 collection = database["<collectionName>"] 10 11 definition = { 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 28 collection.update_search_index("<indexName>", definition)
Para saber mais, consulte update_search_index() método.
Substitua os seguintes valores e salve o arquivo.
<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. |
Excluir um índice do Atlas Vector Search
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.
Acesso necessário
Você deve ter a função Project Search Index Editor
ou superior para excluir um índice do Atlas Vector Search.
Procedimento
➤ 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.
1 curl --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:
Execute o comando para excluir o índice.
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 .
No Atlas, váGo para a Clusters página do seu projeto.
Se ainda não tiver sido exibido, selecione a organização que contém seu projeto no menu Organizations na barra de navegação.
Se ainda não estiver exibido, selecione o projeto desejado no menu Projects na barra de navegação.
Se ainda não estiver exibido, clique em Clusters na barra lateral.
A página Clusters é exibida.
Acesse a página do Atlas Search do seu cluster.
Você pode acessar a página do Atlas Search pela barra lateral, pelo Data Explorer ou pela página de detalhes do cluster.
Na barra lateral, clique em Atlas Search sob o título Services.
No menu suspenso Select data source, selecione seu cluster e clique em Go to Atlas Search.
A página Atlas Search é exibida.
Clique no botão Browse Collections para o seu cluster.
Expanda o banco de dados e selecione a coleção.
Clique na guia Search Indexes da coleção.
A página Atlas Search é exibida.
Clique no nome do seu cluster.
Clique na aba Atlas Search.
A página Atlas Search é exibida.
Para excluir um índice do Atlas Vector Search de uma coleção usando mongosh
, execute as seguintes etapas:
Conecte-se ao cluster do Atlas usando mongosh
.
Para saber mais, consulte Conectar via mongosh
.
Execute o método db.collection.dropSearchIndex()
.
O método db.collection.dropSearchIndex()
tem a seguinte sintaxe:
1 db.<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:
Crie o arquivo .go
e use o método SearchIndexes().DropOne()
para excluir o índice.
1 package main 2 3 import ( 4 "context" 5 "fmt" 6 "log" 7 8 "go.mongodb.org/mongo-driver/mongo" 9 "go.mongodb.org/mongo-driver/mongo/options" 10 ) 11 12 func 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 }
Substitua os seguintes valores e salve o arquivo.
<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 . |
Para excluir 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:
Crie o arquivo .java
e use o método collection.dropSearchIndex()
para excluir o índice.
1 import com.mongodb.client.MongoClient; 2 import com.mongodb.client.MongoClients; 3 import com.mongodb.client.MongoCollection; 4 import com.mongodb.client.MongoDatabase; 5 import org.bson.Document; 6 7 public 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 }
Substitua os seguintes valores e salve o arquivo.
<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 . |
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:
Crie o arquivo .js
e use o método dropSearchIndex()
para excluir o índice.
1 const { MongoClient } = require("mongodb"); 2 3 // connect to your Atlas deployment 4 const uri = "<connectionString>"; 5 6 const client = new MongoClient(uri); 7 8 async 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 } 20 run().catch(console.dir);
Substitua os seguintes valores e salve o arquivo.
<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 . |
Para excluir um índice do Atlas Vector Search para uma coleção usando o driver PyMongo v4.7 ou posterior, execute as seguintes etapas:
Crie o arquivo .py
e use o método drop_search_index()
para excluir o índice.
1 from pymongo.mongo_client import MongoClient 2 3 # Connect to your Atlas deployment 4 uri = "<connectionString>" 5 client = MongoClient(uri) 6 7 # Access your database and collection 8 database = client["<databaseName>"] 9 collection = database["<collectionName>"] 10 11 # Delete your search index 12 collection.drop_search_index("<indexName>")
Para saber mais, consulte drop_search_index() método.
Substitua os seguintes valores e salve o arquivo.
<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. |
Status do índice
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 Status lê Active, 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:
|
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.