Como indexar campos para pesquisa vetorial
Nesta página
- Considerações
- Clientes aceitos
- Sintaxe
- Campos do índice do Atlas Vector Search
- Sobre os tipos
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 $vectorSearch
queries. Você pode definir o índice para as incorporações vetoriais que deseja consultar e quaisquer campos adicionais que queira usar para pré-filtrar seus dados. É útil filtrar os dados para restringir o escopo da pesquisa semântica e garantir que determinadas incorporações vetoriais não sejam consideradas para comparação, como em um ambiente de vários inquilinos.
Você pode 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 com 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 vetores com o subtipo
int1
.Quantização escalar automática.
Quantização binária automática.
Ao utilizar os índices do Atlas Vector Search, você pode observar um aumento no consumo de recursos em um nó ocioso do seu cluster Atlas. Isso ocorre devido ao processo subjacente mongot, que realiza várias operações essenciais para o Atlas Vector Search. A utilização da CPU em um nó ocioso pode variar dependendo do número, da complexidade e do tamanho dos índices.
Para saber mais sobre considerações de dimensionamento para seus índices, consulte Requisitos de memória para indexar vetores.
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 |
---|---|---|---|
| matriz de documentos | Obrigatório | Campos de vetor e filtro para indexar, um por documento. Pelo menos um documento deve conter a definição de campo para o campo vetorial. Você também pode indexar campos adicionais para pré-filtrar os dados. |
| string | Obrigatório | Tipo de campo a ser usado para indexar campos para
|
| 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: |
| int | Obrigatório | Número de dimensões vetoriais que o Atlas Vector Search impõe no momento do índice e no momento da query. Você deve especificar um valor menor ou igual a
Você pode definir este campo somente para campos do tipo |
| 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. |
| 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 BSON BinData vetores com subtipo float32
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 vetores com o subtipo
int1
.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 | cosine | dotProduct |
---|---|---|---|
| √ | ||
| √ | √ | √ |
| √ | √ | √ |
| √ | √ | √ |
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 adicionais para pré-filtrar seus dados. Você pode filtrar valores booleanos, de data, de objectId, numéricos, de string e de UUID, incluindo arrays desses tipos. É ú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
Você pode criar um índice Atlas Vector Search para todas as coleções que contenham incorporações vetoriais menores ou iguais a 8192 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
Observação
Você pode utilizar o mongosh
comando ou métodos de assistente do driver para criar índices do Atlas Vector Search em todas as camadas do Atlas cluster. Para obter uma lista de versões de driver compatíveis, consulte Clientes compatíveis.
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 (independentemente do tipo,
search
ouvector
) emM0
clusters.5 índices em
M2
clusters.10 índices em
M5
clusters.10 índices em clusters Flex.
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 Vector 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
. 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 1536
dimensões vetoriais e mede a similaridade usando a função dotProduct
.
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": "dotProduct" 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": "dotProduct" 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.
| Banco de dados que contém a collection para a qual você deseja criar o índice. |
| Coleção para a qual você deseja criar o índice. |
| Nome do seu índice. Se você omitir o nome do índice, o Atlas Vector Search nomeará o índice |
| Número de dimensões vetoriais que o Atlas Vector Search impõe no momento do índice e no momento da query. |
| Campos de vetor e filtro para indexar. |
Exemplo
Copie e cole a seguinte definição de índice no arquivo vector-index.json
. 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 a função dotProduct
.
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": "dotProduct" 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": "dotProduct" 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.
Aviso
Melhorias na navegação em andamento
No momento, estamos lançando uma experiência de navegação nova e aprimorada. Se as etapas a seguir não corresponderem à sua visualização na UI do Atlas, consulte a documentação de visualização.
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.
Inicie a configuração do seu índice.
Faça as seguintes seleções na página e clique em Next.
Search Type | Selecione o tipo de índice Vector Search. |
Index Name and Data Source | Especifique as seguintes informações:
|
Configuration Method | For a guided experience, select Visual Editor. To edit the raw index definition, select JSON Editor. |
Observação
Seu índice do Atlas Search tem o nome default
por padrão. Se você manter esse nome, seu índice será o índice de pesquisa padrão para qualquer query do Atlas Search que não especifique uma index
opção diferente em seus operadores. Se você estiver criando vários índices, recomendamos que mantenha uma convenção de nomenclatura descritiva consistente em seus índices.
Especifique a definição do índice.
O Atlas detecta automaticamente campos que contêm embeddings vetoriais, bem como suas dimensões correspondentes, e preenche automaticamente até três campos vetoriais. Para configurar o índice, faça o seguinte:
Se necessário, selecione o campo vetorial a ser indexado no menu suspenso Path.
Selecione Add Another Field para indexar campos adicionais.
Especifique o método de similaridade para cada campo indexado no menu suspenso Similarity Method.
(Opcional) Clique em Advanced e selecione Scalar ou Binary de quantização no menu suspenso para quantizar automaticamente os embeddings no campo.
(Opcional) Especifique outros campos em sua coleção para filtrar os dados na seção Filter Field.
Para saber mais sobre as configurações do índice de pesquisa vetorial do Atlas, consulte Como indexar campos para pesquisa vetorial.
Exemplo
Para a coleção embedded_movies
, o campo plot_embedding
é exibido.
Para configurar o índice, selecione Dot Product no menu suspenso Similarity Method.
Esta definição de índice indexa apenas o campo de incorporações vetoriais (plot_embedding
) para executar a pesquisa vetorial.
Para a coleção embedded_movies
, o campo plot_embedding
é exibido.
Para configurar o índice, faça o seguinte:
Selecione Dot Product no menu suspenso Similarity Method.
Clique em Advanced, depois selecione a quantização Scalar no menu suspenso.
Na seção Filter Field, especifique os campos
genres
eyear
para filtrar os dados.
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.
Ele também possibilita a quantização automática (scalar
) para o processamento eficiente das incorporações.
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 "quantization": "none | scalar | binary" 9 }, 10 { 11 "type": "filter", 12 "path": "<field-to-index>" 13 }, 14 ... 15 ] 16 }
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
. 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 1536
dimensões vetoriais e mede a similaridade usando a função dotProduct
.
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": "dotProduct" 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.
Ele também possibilita a quantização automática (scalar
) para o processamento eficiente das incorporações.
1 { 2 "fields": [{ 3 "type": "vector", 4 "path": "plot_embedding", 5 "numDimensions": 1536, 6 "similarity": "dotProduct", 7 "quantization": "scalar" 8 }, 9 { 10 "type": "filter", 11 "path": "genres" 12 }, 13 { 14 "type": "filter", 15 "path": "year" 16 }] 17 }
Verifique o status.
O índice recém-criado é exibido 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
. 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 1536
dimensões vetoriais e mede a similaridade usando a função dotProduct
.
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": "dotProduct", 11 "quantization": "scalar" 12 } 13 ] 14 } 15 );
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": "dotProduct" 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 C# v3.1.0 ou posterior, execute as seguintes etapas:
Crie um arquivo .cs
e defina o índice no arquivo.
1 using MongoDB.Bson; 2 using MongoDB.Driver; 3 using System; 4 using System.Threading; 5 6 // Connect to your Atlas deployment 7 private const string MongoConnectionString = "<connectionString>"; 8 var client = new MongoClient(MongoConnectionString); 9 10 // Access your database and collection 11 var database = client.GetDatabase("<databaseName>"); 12 var collection = database.GetCollection<BsonDocument>("<collectionName>"); 13 14 // Create your index model, then create the search index 15 var name = "<indexName>"; 16 var type = SearchIndexType.VectorSearch; 17 18 var definition = new BsonDocument 19 { 20 { "fields", new BsonArray 21 { 22 new BsonDocument 23 { 24 { "type", "vector" }, 25 { "path", "<fieldToIndex>" }, 26 { "numDimensions", <numberOfDimensions> }, 27 { "similarity", "euclidean | cosine | dotProduct" } 28 } 29 } 30 } 31 }; 32 33 var model = new CreateSearchIndexModel(name, type, definition); 34 35 var searchIndexView = collection.SearchIndexes; 36 searchIndexView.CreateOne(model); 37 Console.WriteLine($"New search index named {name} is building."); 38 39 // Wait for initial sync to complete 40 Console.WriteLine("Polling to check if the index is ready. This may take up to a minute."); 41 bool queryable = false; 42 while (!queryable) 43 { 44 var indexes = searchIndexView.List(); 45 foreach (var index in indexes.ToEnumerable()) 46 { 47 if (index["name"] == name) 48 { 49 queryable = index["queryable"].AsBoolean; 50 } 51 } 52 if (!queryable) 53 { 54 Thread.Sleep(5000); 55 } 56 } 57 Console.WriteLine($"{name} is ready for querying.");
1 using MongoDB.Bson; 2 using MongoDB.Driver; 3 using System; 4 using System.Threading; 5 6 // Connect to your Atlas deployment 7 private const string MongoConnectionString = "<connectionString>"; 8 var client = new MongoClient(MongoConnectionString); 9 10 // Access your database and collection 11 var database = client.GetDatabase("<databaseName>"); 12 var collection = database.GetCollection<BsonDocument>("<collectionName>"); 13 14 // Create your index models and add them to an array 15 var type = SearchIndexType.VectorSearch; 16 17 var definitionOne = new BsonDocument 18 { 19 { "fields", new BsonArray 20 { 21 new BsonDocument 22 { 23 { "type", "vector" }, 24 { "path", "<fieldToIndex>" }, 25 { "numDimensions", <numberOfDimensions> }, 26 { "similarity", "euclidean | cosine | dotProduct" } 27 } 28 } 29 } 30 }; 31 var modelOne = new CreateSearchIndexModel("<indexName>", type, definitionOne); 32 33 var definitionTwo = new BsonDocument 34 { 35 { "fields", new BsonArray 36 { 37 new BsonDocument 38 { 39 { "type", "vector" }, 40 { "path", "<fieldToIndex>" }, 41 { "numDimensions", <numberOfDimensions> }, 42 { "similarity", "euclidean | cosine | dotProduct" } 43 } 44 } 45 } 46 }; 47 var modelTwo = new CreateSearchIndexModel("<indexName>", type, definitionTwo); 48 49 var models = new CreateSearchIndexModel[] { modelOne, modelTwo }; 50 51 // Create the search indexes 52 var searchIndexView = collection.SearchIndexes; 53 searchIndexView.CreateMany(models); 54 55 Console.WriteLine($"New search indexes are building. This may take up to a minute.");
Exemplo
Crie um arquivo denominado IndexService.cs
.
Substitua os seguintes valores e salve o arquivo.
| Connection string do Atlas. Para saber mais, consulte Conectar via drivers. |
| Banco de dados que contém a collection para a qual você deseja criar o índice. |
| Coleção para a qual você deseja criar o índice. |
| Nome do seu índice. Se você omitir o nome do índice, o padrão será |
| Número de dimensões vetoriais que o Atlas Vector Search impõe no momento do índice e no momento da query. |
| Campos de vetor e filtro para indexar. |
Exemplo
Copie e cole o seguinte no IndexService.cs
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 a função dotProduct
.
A definição de índice a seguir indexa somente o campo de incorporações vetoriais (plot_embedding
) para executar a Atlas Search vetorial.
1 namespace query_quick_start; 2 3 using MongoDB.Bson; 4 using MongoDB.Driver; 5 using System; 6 using System.Threading; 7 8 public class IndexService 9 { 10 // Replace the placeholder with your Atlas connection string 11 private const string MongoConnectionString = "<connection-string>"; 12 public void CreateVectorIndex() 13 { 14 try 15 { 16 // Connect to your Atlas cluster 17 var client = new MongoClient(MongoConnectionString); 18 var database = client.GetDatabase("sample_mflix"); 19 var collection = database.GetCollection<BsonDocument>("embedded_movies"); 20 21 var searchIndexView = collection.SearchIndexes; 22 var name = "vector_index"; 23 var type = SearchIndexType.VectorSearch; 24 25 var definition = new BsonDocument 26 { 27 { "fields", new BsonArray 28 { 29 new BsonDocument 30 { 31 { "type", "vector" }, 32 { "path", "plot_embedding" }, 33 { "numDimensions", 1536 }, 34 { "similarity", "dotProduct" }, 35 { "quantization", "scalar" } 36 } 37 } 38 } 39 }; 40 41 var model = new CreateSearchIndexModel(name, type, definition); 42 43 searchIndexView.CreateOne(model); 44 Console.WriteLine($"New search index named {name} is building."); 45 46 // Polling for index status 47 Console.WriteLine("Polling to check if the index is ready. This may take up to a minute."); 48 bool queryable = false; 49 while (!queryable) 50 { 51 var indexes = searchIndexView.List(); 52 foreach (var index in indexes.ToEnumerable()) 53 { 54 if (index["name"] == name) 55 { 56 queryable = index["queryable"].AsBoolean; 57 } 58 } 59 if (!queryable) 60 { 61 Thread.Sleep(5000); 62 } 63 } 64 Console.WriteLine($"{name} is ready for querying."); 65 } 66 catch (Exception e) 67 { 68 Console.WriteLine($"Exception: {e.Message}"); 69 } 70 } 71 }
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 namespace query_quick_start; 2 3 using MongoDB.Bson; 4 using MongoDB.Driver; 5 using System; 6 using System.Threading; 7 8 public class IndexService 9 { 10 // Replace the placeholder with your Atlas connection string 11 private const string MongoConnectionString = "<connection-string>"; 12 public void CreateVectorIndex() 13 { 14 try 15 { 16 // Connect to your Atlas cluster 17 var client = new MongoClient(MongoConnectionString); 18 var database = client.GetDatabase("sample_mflix"); 19 var collection = database.GetCollection<BsonDocument>("embedded_movies"); 20 21 var searchIndexView = collection.SearchIndexes; 22 var name = "vector_index"; 23 var type = SearchIndexType.VectorSearch; 24 25 var definition = new BsonDocument 26 { 27 { "fields", new BsonArray 28 { 29 new BsonDocument 30 { 31 { "type", "vector" }, 32 { "path", "plot_embedding" }, 33 { "numDimensions", 1536 }, 34 { "similarity", "dotProduct" }, 35 { "quantization", "scalar"} 36 }, 37 new BsonDocument 38 { 39 {"type", "filter"}, 40 {"path", "genres"} 41 }, 42 new BsonDocument 43 { 44 {"type", "filter"}, 45 {"path", "year"} 46 } 47 } 48 } 49 }; 50 51 var model = new CreateSearchIndexModel(name, type, definition); 52 53 searchIndexView.CreateOne(model); 54 Console.WriteLine($"New search index named {name} is building."); 55 56 // Polling for index status 57 Console.WriteLine("Polling to check if the index is ready. This may take up to a minute."); 58 bool queryable = false; 59 while (!queryable) 60 { 61 var indexes = searchIndexView.List(); 62 foreach (var index in indexes.ToEnumerable()) 63 { 64 if (index["name"] == name) 65 { 66 queryable = index["queryable"].AsBoolean; 67 } 68 } 69 if (!queryable) 70 { 71 Thread.Sleep(5000); 72 } 73 } 74 Console.WriteLine($"{name} is ready for querying."); 75 } 76 catch (Exception e) 77 { 78 Console.WriteLine($"Exception: {e.Message}"); 79 } 80 } 81 }
Para criar um índice do Atlas Vector Search para uma coleção usando o driver Go MongoDB v2.0 ou posterior, execute as seguintes etapas:
Crie um arquivo denominado create-index.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/v2/bson" 9 "go.mongodb.org/mongo-driver/v2/mongo" 10 "go.mongodb.org/mongo-driver/v2/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(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 }
Observação
Criação de índice programática
O driver do MongoDB Go suporta o gerenciamento programático de índices do Atlas Vector Search a partir da v1.16.0, mas o código anterior mostra a sintaxe do driver da v2.x.
Substitua os seguintes valores e salve o arquivo.
| Connection string do Atlas. Para saber mais, consulte Conectar via drivers. |
| Banco de dados que contém a collection para a qual você deseja criar o índice. |
| Coleção para a qual você deseja criar o índice. |
| Nome do seu índice. Se você omitir o nome do índice, o padrão será |
| Número de dimensões vetoriais que o Atlas Vector Search impõe no momento do índice e no momento da query. |
| Campos de vetor e filtro para indexar. |
Exemplo
Copie e cole o seguinte no arquivo create-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 a função dotProduct
.
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/v2/bson" 10 "go.mongodb.org/mongo-driver/v2/mongo" 11 "go.mongodb.org/mongo-driver/v2/mongo/options" 12 ) 13 14 func main() { 15 ctx := context.Background() 16 17 // Replace the placeholder with your Atlas connection string 18 const uri = "<connection-string>" 19 20 // Connect to your Atlas cluster 21 clientOptions := options.Client().ApplyURI(uri) 22 client, err := mongo.Connect(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 Quantization string `bson:"quantization"` 38 } 39 40 type vectorDefinition struct { 41 Fields []vectorDefinitionField `bson:"fields"` 42 } 43 44 indexName := "vector_index" 45 opts := options.SearchIndexes().SetName(indexName).SetType("vectorSearch") 46 47 indexModel := mongo.SearchIndexModel{ 48 Definition: vectorDefinition{ 49 Fields: []vectorDefinitionField{{ 50 Type: "vector", 51 Path: "plot_embedding", 52 NumDimensions: 1536, 53 Similarity: "dotProduct", 54 Quantization: "scalar"}}, 55 }, 56 Options: opts, 57 } 58 59 // Create the index 60 searchIndexName, err := coll.SearchIndexes().CreateOne(ctx, indexModel) 61 if err != nil { 62 log.Fatalf("failed to create the search index: %v", err) 63 } 64 log.Println("New search index named " + searchIndexName + " is building.") 65 66 // Await the creation of the index. 67 log.Println("Polling to check if the index is ready. This may take up to a minute.") 68 searchIndexes := coll.SearchIndexes() 69 var doc bson.Raw 70 for doc == nil { 71 cursor, err := searchIndexes.List(ctx, options.SearchIndexes().SetName(searchIndexName)) 72 if err != nil { 73 fmt.Errorf("failed to list search indexes: %w", err) 74 } 75 76 if !cursor.Next(ctx) { 77 break 78 } 79 80 name := cursor.Current.Lookup("name").StringValue() 81 queryable := cursor.Current.Lookup("queryable").Boolean() 82 if name == searchIndexName && queryable { 83 doc = cursor.Current 84 } else { 85 time.Sleep(5 * time.Second) 86 } 87 } 88 89 log.Println(searchIndexName + " is ready for querying.") 90 }
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/v2/bson" 10 "go.mongodb.org/mongo-driver/v2/mongo" 11 "go.mongodb.org/mongo-driver/v2/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(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 Quantization string `bson:"quantization"` 39 } 40 41 type filterField struct { 42 Type string `bson:"type"` 43 Path string `bson:"path"` 44 } 45 46 type indexDefinition struct { 47 Fields []vectorDefinitionField `bson:"fields"` 48 } 49 50 vectorDefinition := vectorDefinitionField{ 51 Type: "vector", 52 Path: "plot_embedding", 53 NumDimensions: 1536, 54 Similarity: "dotProduct", 55 Quantization: "scalar"} 56 genreFilterDefinition := filterField{"filter", "genres"} 57 yearFilterDefinition := filterField{"filter", "year"} 58 59 indexModel := mongo.SearchIndexModel{ 60 Definition: bson.D{{Key: "fields", Value: [3]interface{}{ 61 vectorDefinition, 62 genreFilterDefinition, 63 yearFilterDefinition}}}, 64 Options: opts, 65 } 66 67 // Create the index 68 searchIndexName, err := coll.SearchIndexes().CreateOne(ctx, indexModel) 69 if err != nil { 70 log.Fatalf("failed to create the search index: %v", err) 71 } 72 log.Println("New search index named " + searchIndexName + " is building.") 73 74 // Await the creation of the index. 75 log.Println("Polling to check if the index is ready. This may take up to a minute.") 76 searchIndexes := coll.SearchIndexes() 77 var doc bson.Raw 78 for doc == nil { 79 cursor, err := searchIndexes.List(ctx, options.SearchIndexes().SetName(searchIndexName)) 80 if err != nil { 81 fmt.Errorf("failed to list search indexes: %w", err) 82 } 83 84 if !cursor.Next(ctx) { 85 break 86 } 87 88 name := cursor.Current.Lookup("name").StringValue() 89 queryable := cursor.Current.Lookup("queryable").Boolean() 90 if name == searchIndexName && queryable { 91 doc = cursor.Current 92 } else { 93 time.Sleep(5 * time.Second) 94 } 95 } 96 97 log.Println(searchIndexName + " is ready for querying.") 98 }
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.MongoClient; 2 import com.mongodb.client.MongoClients; 3 import com.mongodb.client.MongoCollection; 4 import com.mongodb.client.MongoDatabase; 5 import com.mongodb.client.model.SearchIndexModel; 6 import com.mongodb.client.model.SearchIndexType; 7 import org.bson.Document; 8 import org.bson.conversions.Bson; 9 10 import java.util.Arrays; 11 import java.util.Collections; 12 import java.util.List; 13 14 public class VectorIndex { 15 16 public static void main(String[] args) { 17 18 // Replace the placeholder with your Atlas connection string 19 String uri = "<connectionString>"; 20 21 // Connect to your Atlas cluster 22 try (MongoClient mongoClient = MongoClients.create(uri)) { 23 24 // Set the namespace 25 MongoDatabase database = mongoClient.getDatabase("<databaseName>"); 26 MongoCollection<Document> collection = database.getCollection("<collectionName>"); 27 28 // Define the index details 29 String indexName = "<indexName>"; 30 Bson definition = new Document( 31 "fields", 32 Arrays.asList( 33 new Document("type", "vector") 34 .append("path", "<fieldToIndex>") 35 .append("numDimensions", <numberOfDimensions>) 36 .append("similarity", "euclidean | cosine | dotProduct"), 37 new Document("type", "filter") 38 .append("path", "<fieldToIndex>"), 39 ...)); 40 41 // Define the index model 42 SearchIndexModel indexModel = new SearchIndexModel( 43 indexName, 44 definition, 45 SearchIndexType.vectorSearch() 46 ); 47 48 // Create the index using the defined model 49 List<String> result = collection.createSearchIndexes(Collections.singletonList(indexModel)); 50 System.out.println("Successfully created vector index named: " + result.get(0)); 51 System.out.println("It may take up to a minute for the index to leave the BUILDING status and become queryable."); 52 53 // Wait for Atlas to build the index 54 System.out.println("Polling to confirm the index has left the BUILDING status."); 55 // No special handling in case of a timeout. Custom handling can be implemented. 56 waitForIndex(collection, indexName); 57 } 58 } 59 60 /** 61 * Polls the collection to check whether the specified index is ready to query. 62 */ 63 public static <T> boolean waitForIndex(final MongoCollection<T> collection, final String indexName) { 64 long startTime = System.nanoTime(); 65 long timeoutNanos = TimeUnit.SECONDS.toNanos(60); 66 while (System.nanoTime() - startTime < timeoutNanos) { 67 Document indexRecord = StreamSupport.stream(collection.listSearchIndexes().spliterator(), false) 68 .filter(index -> indexName.equals(index.getString("name"))) 69 .findAny().orElse(null); 70 if (indexRecord != null) { 71 if ("FAILED".equals(indexRecord.getString("status"))) { 72 throw new RuntimeException("Search index has FAILED status."); 73 } 74 if (indexRecord.getBoolean("queryable")) { 75 System.out.println(indexName + " index is ready to query"); 76 return true; 77 } 78 } 79 try { 80 Thread.sleep(100); // busy-wait, avoid in production 81 } catch (InterruptedException e) { 82 Thread.currentThread().interrupt(); 83 throw new RuntimeException(e); 84 } 85 } 86 return false; 87 } 88 }
Substitua os seguintes valores e salve o arquivo.
| Connection string do Atlas. Para saber mais, consulte Conectar via drivers. |
| Banco de dados que contém a collection para a qual você deseja criar o índice. |
| Coleção para a qual você deseja criar o índice. |
| Nome do seu índice. Se você omitir o nome do índice, o padrão será |
| Número de dimensões vetoriais que o Atlas Vector Search impõe no momento do índice e no momento da query. |
| 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.Especifica
1536
dimensões vetoriais e mede a similaridade usando a funçãodotProduct
.
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.MongoClient; 2 import com.mongodb.client.MongoClients; 3 import com.mongodb.client.MongoCollection; 4 import com.mongodb.client.MongoDatabase; 5 import com.mongodb.client.model.SearchIndexModel; 6 import com.mongodb.client.model.SearchIndexType; 7 import org.bson.Document; 8 import org.bson.conversions.Bson; 9 10 import java.util.Collections; 11 import java.util.List; 12 13 public class VectorIndex { 14 15 public static void main(String[] args) { 16 17 // Replace the placeholder with your Atlas connection string 18 String uri = "<connectionString>"; 19 20 // Connect to your Atlas cluster 21 try (MongoClient mongoClient = MongoClients.create(uri)) { 22 23 // Set the namespace 24 MongoDatabase database = mongoClient.getDatabase("sample_mflix"); 25 MongoCollection<Document> collection = database.getCollection("embedded_movies"); 26 27 // Define the index details 28 String indexName = "vector_index"; 29 Bson definition = new Document( 30 "fields", 31 Collections.singletonList( 32 new Document("type", "vector") 33 .append("path", "plot_embedding") 34 .append("numDimensions", 1536) 35 .append("similarity", "dotProduct") 36 .append("quantization", "scalar"))); 37 38 // Define the index model 39 SearchIndexModel indexModel = new SearchIndexModel( 40 indexName, 41 definition, 42 SearchIndexType.vectorSearch()); 43 44 // Create the index using the defined model 45 List<String> result = collection.createSearchIndexes(Collections.singletonList(indexModel)); 46 System.out.println("Successfully created vector index named: " + result.get(0)); 47 System.out.println("It may take up to a minute for the index to leave the BUILDING status and become queryable."); 48 49 // Wait for Atlas to build the index 50 System.out.println("Polling to confirm the index has left the BUILDING status."); 51 // No special handling in case of a timeout. Custom handling can be implemented. 52 waitForIndex(collection, indexName); 53 } 54 } 55 56 /** 57 * Polls the collection to check whether the specified index is ready to query. 58 */ 59 public static <T> boolean waitForIndex(final MongoCollection<T> collection, final String indexName) { 60 long startTime = System.nanoTime(); 61 long timeoutNanos = TimeUnit.SECONDS.toNanos(60); 62 while (System.nanoTime() - startTime < timeoutNanos) { 63 Document indexRecord = StreamSupport.stream(collection.listSearchIndexes().spliterator(), false) 64 .filter(index -> indexName.equals(index.getString("name"))) 65 .findAny().orElse(null); 66 if (indexRecord != null) { 67 if ("FAILED".equals(indexRecord.getString("status"))) { 68 throw new RuntimeException("Search index has FAILED status."); 69 } 70 if (indexRecord.getBoolean("queryable")) { 71 System.out.println(indexName + " index is ready to query"); 72 return true; 73 } 74 } 75 try { 76 Thread.sleep(100); // busy-wait, avoid in production 77 } catch (InterruptedException e) { 78 Thread.currentThread().interrupt(); 79 throw new RuntimeException(e); 80 } 81 } 82 return false; 83 } 84 }
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.MongoClient; 2 import com.mongodb.client.MongoClients; 3 import com.mongodb.client.MongoCollection; 4 import com.mongodb.client.MongoDatabase; 5 import com.mongodb.client.model.SearchIndexModel; 6 import com.mongodb.client.model.SearchIndexType; 7 import org.bson.Document; 8 import org.bson.conversions.Bson; 9 10 import java.util.Arrays; 11 import java.util.Collections; 12 import java.util.List; 13 14 public class VectorIndex { 15 16 public static void main(String[] args) { 17 18 // Replace the placeholder with your Atlas connection string 19 String uri = "<connectionString>"; 20 21 // Connect to your Atlas cluster 22 try (MongoClient mongoClient = MongoClients.create(uri)) { 23 24 // Set the namespace 25 MongoDatabase database = mongoClient.getDatabase("sample_mflix"); 26 MongoCollection<Document> collection = database.getCollection("embedded_movies"); 27 28 // Define the index details with the filter fields 29 String indexName = "vector_index"; 30 Bson definition = new Document( 31 "fields", 32 Arrays.asList( 33 new Document("type", "vector") 34 .append("path", "plot_embedding") 35 .append("numDimensions", 1536) 36 .append("similarity", "dotProduct") 37 .append("quantization", "scalar"), 38 new Document("type", "filter") 39 .append("path", "genres"), 40 new Document("type", "filter") 41 .append("path", "year"))); 42 43 // Define the index model 44 SearchIndexModel indexModel = new SearchIndexModel( 45 indexName, 46 definition, 47 SearchIndexType.vectorSearch()); 48 49 // Create the index using the defined model 50 List<String> result = collection.createSearchIndexes(Collections.singletonList(indexModel)); 51 System.out.println("Successfully created vector index named: " + result.get(0)); 52 System.out.println("It may take up to a minute for the index to leave the BUILDING status and become queryable."); 53 54 // Wait for Atlas to build the index 55 System.out.println("Polling to confirm the index has left the BUILDING status."); 56 // No special handling in case of a timeout. Custom handling can be implemented. 57 waitForIndex(collection, indexName); 58 } 59 } 60 61 /** 62 * Polls the collection to check whether the specified index is ready to query. 63 */ 64 public static <T> boolean waitForIndex(final MongoCollection<T> collection, final String indexName) { 65 long startTime = System.nanoTime(); 66 long timeoutNanos = TimeUnit.SECONDS.toNanos(60); 67 while (System.nanoTime() - startTime < timeoutNanos) { 68 Document indexRecord = StreamSupport.stream(collection.listSearchIndexes().spliterator(), false) 69 .filter(index -> indexName.equals(index.getString("name"))) 70 .findAny().orElse(null); 71 if (indexRecord != null) { 72 if ("FAILED".equals(indexRecord.getString("status"))) { 73 throw new RuntimeException("Search index has FAILED status."); 74 } 75 if (indexRecord.getBoolean("queryable")) { 76 System.out.println(indexName + " index is ready to query"); 77 return true; 78 } 79 } 80 try { 81 Thread.sleep(100); // busy-wait, avoid in production 82 } catch (InterruptedException e) { 83 Thread.currentThread().interrupt(); 84 throw new RuntimeException(e); 85 } 86 } 87 return false; 88 } 89 }
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.
| Connection string do Atlas. Para saber mais, consulte Conectar via drivers. |
| Banco de dados que contém a collection para a qual você deseja criar o índice. |
| Coleção para a qual você deseja criar o índice. |
| Nome do seu índice. Se você omitir o nome do índice, o padrão será |
| Número de dimensões vetoriais que o Atlas Vector Search impõe no momento do índice e no momento da query. |
| 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 a função dotProduct
.
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": "dotProduct", 24 "quantization": "scalar" 25 } 26 ] 27 } 28 } 29 30 // run the helper method 31 const result = await collection.createSearchIndex(index); 32 console.log(`New search index named ${result} is building.`); 33 34 // wait for the index to be ready to query 35 console.log("Polling to check if the index is ready. This may take up to a minute.") 36 let isQueryable = false; 37 while (!isQueryable) { 38 const cursor = collection.listSearchIndexes(); 39 for await (const index of cursor) { 40 if (index.name === result) { 41 if (index.queryable) { 42 console.log(`${result} is ready for querying.`); 43 isQueryable = true; 44 } else { 45 await new Promise(resolve => setTimeout(resolve, 5000)); 46 } 47 } 48 } 49 } 50 } finally { 51 await client.close(); 52 } 53 } 54 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": "dotProduct", 24 "quantization": "scalar" 25 }, 26 { 27 "type": "filter", 28 "path": "genres" 29 }, 30 { 31 "type": "filter", 32 "path": "year" 33 } 34 ] 35 } 36 } 37 38 // run the helper method 39 const result = await collection.createSearchIndex(index); 40 console.log(`New search index named ${result} is building.`); 41 42 // wait for the index to be ready to query 43 console.log("Polling to check if the index is ready. This may take up to a minute.") 44 let isQueryable = false; 45 while (!isQueryable) { 46 const cursor = collection.listSearchIndexes(); 47 for await (const index of cursor) { 48 if (index.name === result) { 49 if (index.queryable) { 50 console.log(`${result} is ready for querying.`); 51 isQueryable = true; 52 } else { 53 await new Promise(resolve => setTimeout(resolve, 5000)); 54 } 55 } 56 } 57 } 58 } finally { 59 await client.close(); 60 } 61 } 62 run().catch(console.dir);
Trabalhe com uma versão executável deste exemplo como um notebook do Python.
Para criar í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 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.
| Connection string do Atlas. Para saber mais, consulte Conectar via drivers. |
| Banco de dados que contém a collection para a qual você deseja criar o índice. |
| Coleção para a qual você deseja criar o índice. |
| Nome do seu índice. Se você omitir o nome do índice, o padrão será |
| Número de dimensões vetoriais que o Atlas Vector Search impõe no momento do índice e no momento da query. |
| 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 a função dotProduct
.
Trabalhe com uma versão executável deste exemplo como um notebook do Python.
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": "dotProduct", 22 "quantization": "scalar" 23 } 24 ] 25 }, 26 name="vector_index", 27 type="vectorSearch" 28 ) 29 30 result = collection.create_search_index(model=search_index_model) 31 print("New search index named " + result + " is building.") 32 33 # Wait for initial sync to complete 34 print("Polling to check if the index is ready. This may take up to a minute.") 35 predicate=None 36 if predicate is None: 37 predicate = lambda index: index.get("queryable") is True 38 39 while True: 40 indices = list(collection.list_search_indexes(result)) 41 if len(indices) and predicate(indices[0]): 42 break 43 time.sleep(5) 44 print(result + " is ready for querying.") 45 46 client.close()
Trabalhe com uma versão executável deste exemplo como um notebook do Python.
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": "dotProduct", 22 "quantization": "scalar" 23 }, 24 { 25 "type": "filter", 26 "path": "genres" 27 }, 28 { 29 "type": "filter", 30 "path": "year" 31 } 32 ] 33 }, 34 name="vector_index", 35 type="vectorSearch" 36 ) 37 38 result = collection.create_search_index(model=search_index_model) 39 print("New search index named " + result + " is building.") 40 41 # Wait for initial sync to complete 42 print("Polling to check if the index is ready. This may take up to a minute.") 43 predicate=None 44 if predicate is None: 45 predicate = lambda index: index.get("queryable") is True 46 47 while True: 48 indices = list(collection.list_search_indexes(result)) 49 if len(indices) and predicate(indices[0]): 50 break 51 time.sleep(5) 52 print(result + " is ready for querying.") 53 54 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.
Observação
Você pode utilizar o comando mongosh
ou métodos de assistente do driver para recuperar índices do Atlas Vector Search em todas as camadas do Atlas cluster. Para obter uma lista de versões de driver compatíveis, consulte Clientes compatíveis.
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.
Aviso
Melhorias na navegação em andamento
No momento, estamos lançando uma experiência de navegação nova e aprimorada. Se as etapas a seguir não corresponderem à sua visualização na UI do Atlas, consulte a documentação de visualização.
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.
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 | 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 UI Search Tester em relação a índices do tipo |
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 os índices do Atlas Vector Search para uma coleção usando o driver C# 3.1.0 ou posterior, execute as seguintes etapas:
Crie um arquivo .cs
e use o método .List()
para recuperar os índices da coleção.
1 namespace query_quick_start; 2 3 using MongoDB.Bson; 4 using MongoDB.Driver; 5 6 public class IndexService 7 { 8 private const string MongoConnectionString = "<connectionString>"; 9 // Other class methods here... 10 public void ViewSearchIndexes() 11 { 12 try 13 { 14 // Connect to your Atlas deployment 15 var client = new MongoClient(MongoConnectionString); 16 17 // Access your database and collection 18 var database = client.GetDatabase("<databaseName>"); 19 var collection = database.GetCollection<BsonDocument>("<collectionName>"); 20 21 // Get a list of the collection's search indexes and print them 22 var searchIndexView = collection.SearchIndexes; 23 var indexes = searchIndexView.List(); 24 25 foreach (var index in indexes.ToEnumerable()) 26 { 27 Console.WriteLine(index); 28 } 29 } 30 catch (Exception e) 31 { 32 Console.WriteLine($"Exception: {e.Message}"); 33 } 34 } 35 }
Substitua os seguintes valores e salve o arquivo.
| Sua connection string do Atlas. Para saber mais, consulte Conectar via Drivers. |
| O nome do banco de dados que contém a coleção. |
| O nome da collection. |
Para visualizar um índice do Atlas Vector Search para uma coleção usando o driver MongoDB Go v2.0 ou posterior, execute as seguintes etapas:
Crie um arquivo denominado get-index.go
e utilize 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/v2/bson" 10 "go.mongodb.org/mongo-driver/v2/mongo" 11 "go.mongodb.org/mongo-driver/v2/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(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.
| Sua connection string do Atlas. Para saber mais, consulte Conectar via Drivers. |
| O banco de dados que contém a coleção. |
| A collection para a qual você deseja recuperar os índices. |
| O nome do seu índice se você quiser recuperar um índice específico. Para retornar todos os índices na collection, omita esse valor e remova a chamada para o método |
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.
| Sua connection string do Atlas. Para saber mais, consulte Conectar via Drivers. |
| O banco de dados que contém a coleção. |
| A collection para a qual você deseja recuperar os índices. |
| 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.
| Sua connection string do Atlas. Para saber mais, consulte Conectar via Drivers. |
| O banco de dados que contém a coleção. |
| A collection para a qual você deseja recuperar os índices. |
| O nome do seu índice se você quiser recuperar um índice específico. Para retornar todos os índices da collection, omita este valor. |
Trabalhe com uma versão executável deste exemplo como um notebook do Python.
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.
| Sua connection string do Atlas. Para saber mais, consulte Conectar via Drivers. |
| O nome do banco de dados que contém a coleção. |
| 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 de editar um índice, o Atlas Vector Search o reconstrói. Enquanto o índice é reconstruído, você pode continuar a executar queries de pesquisa vetorial usando a definição de índice antiga. Quando o índice terminar de ser reconstruído, o índice antigo será automaticamente substituído. Esse processo é semelhante aos índices do Atlas Search . Para saber mais, consulte Criar e atualizar um índice do Atlas Search.
Acesso necessário
Você deve ter a função Project Search Index Editor
ou superior para editar um índice do Atlas Vector Search.
Observação
Você pode utilizar o mongosh
comando ou métodos de assistente do driver para editar índices do Atlas Vector Search em todas as camadas do Atlas cluster. Para obter uma lista de versões de driver compatíveis, consulte Clientes compatíveis.
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.
| Banco de dados que contém a collection para a qual você deseja criar o índice. |
| Coleção para a qual você deseja criar o índice. |
| Nome do seu índice. Se você omitir o nome do índice, o Atlas Vector Search nomeará o índice |
| Número de dimensões vetoriais que o Atlas Vector Search impõe no momento do índice e no momento da query. |
| 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.
Aviso
Melhorias na navegação em andamento
No momento, estamos lançando uma experiência de navegação nova e aprimorada. Se as etapas a seguir não corresponderem à sua visualização na UI do Atlas, consulte a documentação de visualização.
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.
Editar o índice.
Localize o índice de tipo
vectorSearch
para editar.Clique em na coluna Actions para esse índice.
Selecione Edit With Visual Editor para uma experiência guiada ou Edit With JSON Editor para editar a definição do índice bruto.
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 C# 3.1.0 ou posterior, execute as seguintes etapas:
Crie o arquivo .cs
e defina as alterações de índice no arquivo.
1 namespace query_quick_start; 2 3 using MongoDB.Bson; 4 using MongoDB.Driver; 5 6 public class IndexService 7 { 8 private const string MongoConnectionString = "<connectionString>"; 9 // Other class methods here... 10 public void EditVectorIndex() 11 { 12 try 13 { 14 // Connect to your Atlas deployment 15 var client = new MongoClient(MongoConnectionString); 16 17 // Access your database and collection 18 var database = client.GetDatabase("<databaseName>"); 19 var collection = database.GetCollection<BsonDocument>("<collectionName>"); 20 21 var definition = new BsonDocument 22 { 23 { "fields", new BsonArray 24 { 25 new BsonDocument 26 { 27 { "type", "vector" }, 28 { "path", "<fieldToIndex>" }, 29 { "numDimensions", <numberOfDimensions> }, 30 { "similarity", "euclidean | cosine | dotProduct" } 31 } 32 } 33 } 34 }; 35 36 // Update your search index 37 var searchIndexView = collection.SearchIndexes; 38 searchIndexView.Update(name, definition); 39 } 40 catch (Exception e) 41 { 42 Console.WriteLine($"Exception: {e.Message}"); 43 } 44 } 45 }
Substitua os seguintes valores e salve o arquivo.
| Connection string do Atlas. Para saber mais, consulte Conectar via drivers. |
| Banco de dados que contém a collection para a qual você deseja criar o índice. |
| Coleção para a qual você deseja criar o índice. |
| Bame do seu índice. Se você omitir o nome do índice, o padrão será |
| Número de dimensões vetoriais que o Atlas Vector Search impõe no momento do índice e no momento da query. |
| Campos de vetor e filtro para indexar. |
Para atualizar um índice do Atlas Vector Search para uma collection usando o driver do MongoDB Go v2.0 ou posterior, execute as seguintes etapas:
Crie um arquivo denominado edit-index.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/v2/mongo" 9 "go.mongodb.org/mongo-driver/v2/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(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.
| Connection string do Atlas. Para saber mais, consulte Conectar via drivers. |
| Banco de dados que contém a collection para a qual você deseja criar o índice. |
| Coleção para a qual você deseja criar o índice. |
| Nome do seu índice. Se você omitir o nome do índice, o padrão será |
| Número de dimensões vetoriais que o Atlas Vector Search impõe no momento do índice e no momento da query. |
| 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 .append("quantization", "none | scalar | binary"))); 34 35 // Update the index 36 collection.updateSearchIndex(indexName, definition); 37 System.out.println("Successfully updated the index"); 38 } 39 } 40 }
Substitua os seguintes valores e salve o arquivo.
| Connection string do Atlas. Para saber mais, consulte Conectar via drivers. |
| Banco de dados que contém a collection para a qual você deseja criar o índice. |
| Coleção para a qual você deseja criar o índice. |
| Nome do seu índice. Se você omitir o nome do índice, o padrão será |
| Número de dimensões vetoriais que o Atlas Vector Search impõe no momento do índice e no momento da query. |
| 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.
| Connection string do Atlas. Para saber mais, consulte Conectar via drivers. |
| Banco de dados que contém a collection para a qual você deseja criar o índice. |
| Coleção para a qual você deseja criar o índice. |
| Nome do seu índice. Se você omitir o nome do índice, o padrão será |
| Número de dimensões vetoriais que o Atlas Vector Search impõe no momento do índice e no momento da query. |
| Campos de vetor e filtro para indexar. |
Trabalhe com uma versão executável deste exemplo como um notebook do Python.
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 "quantization": " none | scalar | binary " 19 }, 20 { 21 "type": "filter", 22 "path": "<fieldToIndex>" 23 }, 24 ... 25 ] 26 } 27 28 # Update your search index 29 collection.update_search_index("<indexName>", definition)
Para saber mais, consulte update_search_index() método.
Substitua os seguintes valores e salve o arquivo.
| Connection string do Atlas. Para saber mais, consulte Conectar via drivers. |
| Banco de dados que contém a collection para a qual você deseja criar o índice. |
| Coleção para a qual você deseja criar o índice. |
| Bame do seu índice. Se você omitir o nome do índice, o padrão será |
| Número de dimensões vetoriais que o Atlas Vector Search impõe no momento do índice e no momento da query. |
| 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.
Observação
Você pode usar o mongosh
comando ou os métodos assistente do driver para excluir índices do Atlas Vector Search em todas as camadas do Atlas cluster. Para obter uma lista de versões de driver compatíveis, consulte Clientes compatíveis.
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.
Aviso
Melhorias na navegação em andamento
No momento, estamos lançando uma experiência de navegação nova e aprimorada. Se as etapas a seguir não corresponderem à sua visualização na UI do Atlas, consulte a documentação de visualização.
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.
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 C# 3.1.0 ou posterior, execute as seguintes etapas:
Crie o arquivo .cs
e use o método DropOne()
para excluir o índice.
1 namespace query_quick_start; 2 3 using MongoDB.Bson; 4 using MongoDB.Driver; 5 6 public class IndexService 7 { 8 private const string MongoConnectionString = "<connectionString>"; 9 // Other class methods here... 10 public void DeleteVectorIndex() 11 { 12 try 13 { 14 // Connect to your Atlas deployment 15 var client = new MongoClient(MongoConnectionString); 16 17 // Access your database and collection 18 var database = client.GetDatabase("<databaseName>"); 19 var collection = database.GetCollection<BsonDocument>("<collectionName>"); 20 21 // Delete your search index 22 var searchIndexView = collection.SearchIndexes; 23 var name = "vector_index"; 24 searchIndexView.DropOne(name); 25 26 Console.WriteLine($"Dropping search index named {name}. This may take up to a minute."); 27 } 28 catch (Exception e) 29 { 30 Console.WriteLine($"Exception: {e.Message}"); 31 } 32 } 33 }
Substitua os seguintes valores e salve o arquivo.
| Sua connection string do Atlas. Para saber mais, consulte Conectar via Drivers. |
| O nome do banco de dados que contém a coleção. |
| O nome da collection. |
| O nome do índice a ser excluído. |
Para excluir um índice do Atlas Vector Search para uma coleção usando o driver MongoDB Go v2.0 ou posterior, execute as seguintes etapas:
Crie um arquivo denominado delete-index.go
e utilize 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/v2/mongo" 9 "go.mongodb.org/mongo-driver/v2/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(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.
| Sua connection string do Atlas. Para saber mais, consulte Conectar via Drivers. |
| O banco de dados que contém a collection para a qual você deseja criar o índice. |
| A collection para a qual você deseja criar o índice. |
| O nome do seu índice. Se você omitir o nome do índice, o padrão será |
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.
| Sua connection string do Atlas. Para saber mais, consulte Conectar via Drivers. |
| O banco de dados que contém a collection para a qual você deseja criar o índice. |
| A collection para a qual você deseja criar o índice. |
| O nome do seu índice. Se você omitir o nome do índice, o padrão será |
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.
| Sua connection string do Atlas. Para saber mais, consulte Conectar via Drivers. |
| O banco de dados que contém a collection para a qual você deseja criar o índice. |
| A collection para a qual você deseja criar o índice. |
| O nome do seu índice. Se você omitir o nome do índice, o padrão será |
Trabalhe com uma versão executável deste exemplo como um notebook do Python.
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.
| Sua connection string do Atlas. Para saber mais, consulte Conectar via Drivers. |
| O nome do banco de dados que contém a coleção. |
| O nome da collection. |
| 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 |
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. |
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.