Menu Docs

Como indexar campos para pesquisa vetorial

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.

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.

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

Driver do MongoDB
Versão

1.28.0 ou superior

3.11.0 ou superior

3.1.0 ou superior

1.16.0 ou superior

5.2.0 ou superior

5.2.0 ou superior

6.6.0 ou superior

1.20.0 ou superior

4.7 ou superior

3.1.0 ou superior

5.2.0 ou superior

A seguinte sintaxe define o tipo de índice vectorSearch:

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

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

Opção
Tipo
necessidade
Propósito

fields

matriz de documentos

Obrigatório

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

fields.type

string

Obrigatório

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

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

  • filter - para campos adicionais para filtrar. Você pode filtrar valores booleanos, de data, de objectId, numéricos, de string e de UUID, incluindo arrays desses tipos.

fields.path

string

Obrigatório

Nome do campo a ser indexado. Para campos aninhados, utilize notação de ponto para especificar o caminho para campos incorporados.

Você não pode indexar nomes de campos com dois pontos consecutivos ou nomes de campos terminando com pontos. Por exemplo, o Atlas Vector Search não é compatível com a indexação dos seguintes nomes de campo: foo..bar ou foo_bar..

fields.numDimensions

int

Obrigatório

Número de dimensões vetoriais que o Atlas Vector Search impõe no momento do índice e no momento da query. Você deve especificar um valor menor ou igual a 8192. Para indexar BinData ou vetores quantizados, o valor deve ser um dos seguintes:

  • 1 a 8192 para int8 vetores para ingestão.

  • Múltiplo de 8 para int1 vetores para ingestão.

  • 1 a 8192 para binData(float32) e array(float32) vetores para quantização escalar automática.

  • Múltiplo de 8 para binData(float32) e array(float32) vetores para quantização binária automática.

Você pode definir este campo somente para campos do tipo vector.

fields.similarity

string

Obrigatório

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

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

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

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

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

fields.quantization

string

Opcional

Tipo de quantização vetorial automática para seus vetores. Você pode especificar o tipo de quantização para aplicar em seus vetores. Use essa configuração somente se suas incorporações forem float ou double vetores. O valor pode ser um dos seguintes:

  • none - Indica que não há quantização automática para as incorporações vetoriais. Use essa configuração se você tiver vetores pré-quantizados para ingestão. Se omitido, este é o valor padrão.

  • scalar - Indica a quantização escalar, que transforma valores em inteiros de 1 bytes.

  • binary - Indica a quantização binária, que transforma valores em um único bit. Para utilizar esta quantização, numDimensions deve ser um múltiplo de 8.

Se a precisão for crítica, selecione none ou scalar em vez de binary.

Para saber mais, consulte Quantização vetorial.

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

  • BSON double

  • BSON BinData vector Subtipo float32

  • BSON BinData vector Subtipo int1

  • BSON BinData vector Subtipo int8

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}

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

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

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

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

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

A tabela a seguir mostra as funções de similaridade para os vários tipos:

Tipo de incorporação do vetor
euclidean
cosine
dotProduct

binData(int1)

binData(int8)

binData(float32)

array(float32)

Para ingestão de vetores.

Para quantização escalar ou binária automática.

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

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.

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.

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

  • MongoDB versão 6.0.11, 7.0.2 ou superior

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

Observação

Você pode 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.

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

Não é possível criar mais de:

  • 3 índices (independentemente do tipo, search ou vector) em M0 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+.


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

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

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

Exemplo

A definição de índice a seguir indexa o campo plot_embedding como o tipo vector. 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 .

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

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

1

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

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

Exemplo

Crie um arquivo denominado vector-index.json.

2

<name-of-database>

Banco de dados que contém a collection para a qual você deseja criar o índice.

<name-of-collection>

Coleção para a qual você deseja criar o índice.

<index-name>

Nome do seu índice. Se você omitir o nome do índice, o Atlas Vector Search nomeará o índice vector_index.

<number-of-dimensions>

Número de dimensões vetoriais que o Atlas Vector Search impõe no momento do índice e no momento da query.

<field-to-index>

Campos de vetor e filtro para indexar.

Exemplo

Copie e cole a seguinte definição de índice no arquivo vector-index.json. A 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}
3
atlas clusters search indexes create --clusterName [cluster_name] --file [vector_index].json

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

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

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

Exemplo

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

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

1

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.

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

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

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

    A página Clusters é exibida.

2

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

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

    Se você não tiver clusters, clique em Create cluster para criar um. Para saber mais, consulte Criar um cluster.

  2. Se o seu projeto tiver múltiplos clusters, selecione o cluster que deseja utilizar a partir do menu suspenso Select cluster e clique em Go to Atlas Search.

    A página Atlas Search é exibida.

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

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

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

    A página Atlas Search é exibida.

  1. Clique no nome do seu cluster.

  2. Clique na aba Atlas Search.

    A página Atlas Search é exibida.

3
4

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:

  • Index Name: vector_index é o nome padrão do índice. Os nomes dos índices devem ser exclusivos no namespace, independentemente do tipo de índice. Se você já tiver um índice chamado vector_index nessa coleção, digite um nome diferente.

  • Database and Collection:

    • Selecione o banco de dados para o qual criar o índice. Por exemplo, sample_mflix.

    • Selecione a coleção para a qual deseja criar o índice. Por exemplo, embedded_movies.

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.

5

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:

  1. Se necessário, selecione o campo vetorial a ser indexado no menu suspenso Path.

    Selecione Add Another Field para indexar campos adicionais.

  2. Especifique o método de similaridade para cada campo indexado no menu suspenso Similarity Method.

  3. (Opcional) Clique em Advanced e selecione Scalar ou Binary de quantização no menu suspenso para quantizar automaticamente os embeddings no campo.

  4. (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:

  1. Selecione Dot Product no menu suspenso Similarity Method.

  2. Clique em Advanced, depois selecione a quantização Scalar no menu suspenso.

  3. Na seção Filter Field, especifique os campos genres e year 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}
6
7

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

8
9

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

Observação

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

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

1

Para saber mais, consulte Conectar via mongosh.

2

Exemplo

use sample_mflix
switched to db sample_mflix
3

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

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

Exemplo

A definição de índice a seguir indexa o campo plot_embedding como o tipo vector. 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 .

1db.embedded_movies.createSearchIndex(
2 "vector_index",
3 "vectorSearch",
4 {
5 "fields": [
6 {
7 "type": "vector",
8 "path": "plot_embedding",
9 "numDimensions": 1536,
10 "similarity": "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.

1db.embedded_movies.createSearchIndex(
2 "vector_index",
3 "vectorSearch",
4 {
5 "fields": [
6 {
7 "type": "vector",
8 "path": "plot_embedding",
9 "numDimensions": 1536,
10 "similarity": "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:

1
1using MongoDB.Bson;
2using MongoDB.Driver;
3using System;
4using System.Threading;
5
6// Connect to your Atlas deployment
7private const string MongoConnectionString = "<connectionString>";
8var client = new MongoClient(MongoConnectionString);
9
10// Access your database and collection
11var database = client.GetDatabase("<databaseName>");
12var collection = database.GetCollection<BsonDocument>("<collectionName>");
13
14// Create your index model, then create the search index
15var name = "<indexName>";
16var type = SearchIndexType.VectorSearch;
17
18var 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
33var model = new CreateSearchIndexModel(name, type, definition);
34
35var searchIndexView = collection.SearchIndexes;
36searchIndexView.CreateOne(model);
37Console.WriteLine($"New search index named {name} is building.");
38
39// Wait for initial sync to complete
40Console.WriteLine("Polling to check if the index is ready. This may take up to a minute.");
41bool queryable = false;
42while (!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}
57Console.WriteLine($"{name} is ready for querying.");
1using MongoDB.Bson;
2using MongoDB.Driver;
3using System;
4using System.Threading;
5
6// Connect to your Atlas deployment
7private const string MongoConnectionString = "<connectionString>";
8var client = new MongoClient(MongoConnectionString);
9
10// Access your database and collection
11var database = client.GetDatabase("<databaseName>");
12var collection = database.GetCollection<BsonDocument>("<collectionName>");
13
14// Create your index models and add them to an array
15var type = SearchIndexType.VectorSearch;
16
17var 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};
31var modelOne = new CreateSearchIndexModel("<indexName>", type, definitionOne);
32
33var 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};
47var modelTwo = new CreateSearchIndexModel("<indexName>", type, definitionTwo);
48
49var models = new CreateSearchIndexModel[] { modelOne, modelTwo };
50
51// Create the search indexes
52var searchIndexView = collection.SearchIndexes;
53searchIndexView.CreateMany(models);
54
55Console.WriteLine($"New search indexes are building. This may take up to a minute.");

Exemplo

Crie um arquivo denominado IndexService.cs.

2

<connectionString>

Connection string do Atlas. Para saber mais, consulte Conectar via drivers.

<databaseName>

Banco de dados que contém a collection para a qual você deseja criar o índice.

<collectionName>

Coleção para a qual você deseja criar o índice.

<indexName>

Nome do seu índice. Se você omitir o nome do índice, o padrão será vector_index.

<numberOfDimensions>

Número de dimensões vetoriais que o Atlas Vector Search impõe no momento do índice e no momento da query.

<fieldToIndex>

Campos de vetor e filtro para indexar.

Exemplo

Copie e cole o seguinte no 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.

1namespace query_quick_start;
2
3using MongoDB.Bson;
4using MongoDB.Driver;
5using System;
6using System.Threading;
7
8public 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.

1namespace query_quick_start;
2
3using MongoDB.Bson;
4using MongoDB.Driver;
5using System;
6using System.Threading;
7
8public 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}
3
using query_quick_start;
var indexService = new IndexService();
indexService.CreateVectorIndex();
4
dotnet run

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:

1
1package main
2
3import (
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
13func main() {
14 ctx := context.Background()
15
16 // Replace the placeholder with your Atlas connection string
17 const uri = "<connectionString>"
18
19 // Connect to your Atlas cluster
20 clientOptions := options.Client().ApplyURI(uri)
21 client, err := mongo.Connect(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.

2

<connectionString>

Connection string do Atlas. Para saber mais, consulte Conectar via drivers.

<databaseName>

Banco de dados que contém a collection para a qual você deseja criar o índice.

<collectionName>

Coleção para a qual você deseja criar o índice.

<indexName>

Nome do seu índice. Se você omitir o nome do índice, o padrão será vector_index.

<numberOfDimensions>

Número de dimensões vetoriais que o Atlas Vector Search impõe no momento do índice e no momento da query.

<fieldToIndex>

Campos de vetor e filtro para indexar.

Exemplo

Copie e cole o seguinte no arquivo 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.

1package main
2
3import (
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
14func 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.

1package main
2
3import (
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
14func main() {
15 ctx := context.Background()
16
17 // Replace the placeholder with your Atlas connection string
18 const uri = "<connectionString>"
19
20 // Connect to your Atlas cluster
21 clientOptions := options.Client().ApplyURI(uri)
22 client, err := mongo.Connect(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}
3
go run create-index.go

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

1
1import com.mongodb.client.MongoClient;
2import com.mongodb.client.MongoClients;
3import com.mongodb.client.MongoCollection;
4import com.mongodb.client.MongoDatabase;
5import com.mongodb.client.model.SearchIndexModel;
6import com.mongodb.client.model.SearchIndexType;
7import org.bson.Document;
8import org.bson.conversions.Bson;
9
10import java.util.Arrays;
11import java.util.Collections;
12import java.util.List;
13
14public 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}
2

<connectionString>

Connection string do Atlas. Para saber mais, consulte Conectar via drivers.

<databaseName>

Banco de dados que contém a collection para a qual você deseja criar o índice.

<collectionName>

Coleção para a qual você deseja criar o índice.

<indexName>

Nome do seu índice. Se você omitir o nome do índice, o padrão será vector_index.

<numberOfDimensions>

Número de dimensões vetoriais que o Atlas Vector Search impõe no momento do índice e no momento da query.

<fieldToIndex>

Campos de vetor e filtro para indexar.

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

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

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

  • Especifica 1536 dimensões vetoriais e mede a similaridade usando a função dotProduct.

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

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

1import com.mongodb.client.MongoClient;
2import com.mongodb.client.MongoClients;
3import com.mongodb.client.MongoCollection;
4import com.mongodb.client.MongoDatabase;
5import com.mongodb.client.model.SearchIndexModel;
6import com.mongodb.client.model.SearchIndexType;
7import org.bson.Document;
8import org.bson.conversions.Bson;
9
10import java.util.Collections;
11import java.util.List;
12
13public 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>.

1import com.mongodb.client.MongoClient;
2import com.mongodb.client.MongoClients;
3import com.mongodb.client.MongoCollection;
4import com.mongodb.client.MongoDatabase;
5import com.mongodb.client.model.SearchIndexModel;
6import com.mongodb.client.model.SearchIndexType;
7import org.bson.Document;
8import org.bson.conversions.Bson;
9
10import java.util.Arrays;
11import java.util.Collections;
12import java.util.List;
13
14public 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}
3

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

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

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

Exemplo

Crie um arquivo denominado vector-index.js.

2

<connectionString>

Connection string do Atlas. Para saber mais, consulte Conectar via drivers.

<databaseName>

Banco de dados que contém a collection para a qual você deseja criar o índice.

<collectionName>

Coleção para a qual você deseja criar o índice.

<indexName>

Nome do seu índice. Se você omitir o nome do índice, o padrão será vector_index.

<numberOfDimensions>

Número de dimensões vetoriais que o Atlas Vector Search impõe no momento do índice e no momento da query.

<fieldToIndex>

Campos de vetor e filtro para indexar.

Exemplo

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

1const { MongoClient } = require("mongodb");
2
3// connect to your Atlas deployment
4const uri = "<connectionString>";
5
6const client = new MongoClient(uri);
7
8async function run() {
9 try {
10 const database = client.db("sample_mflix");
11 const collection = database.collection("embedded_movies");
12
13 // define your Atlas Vector Search index
14 const index = {
15 name: "vector_index",
16 type: "vectorSearch",
17 definition: {
18 "fields": [
19 {
20 "type": "vector",
21 "numDimensions": 1536,
22 "path": "plot_embedding",
23 "similarity": "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}
54run().catch(console.dir);

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

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

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

1const { MongoClient } = require("mongodb");
2
3// connect to your Atlas deployment
4const uri = "<connectionString>";
5
6const client = new MongoClient(uri);
7
8async function run() {
9 try {
10 const database = client.db("sample_mflix");
11 const collection = database.collection("embedded_movies");
12
13 // define your Atlas Vector Search index
14 const index = {
15 name: "vector_index",
16 type: "vectorSearch",
17 definition: {
18 "fields": [
19 {
20 "type": "vector",
21 "numDimensions": 1536,
22 "path": "plot_embedding",
23 "similarity": "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}
62run().catch(console.dir);
3
node <file-name>.js

Exemplo

node vector_index.js

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:

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

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

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

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

Exemplo

Crie um arquivo denominado vector-index.py.

2

<connectionString>

Connection string do Atlas. Para saber mais, consulte Conectar via drivers.

<databaseName>

Banco de dados que contém a collection para a qual você deseja criar o índice.

<collectionName>

Coleção para a qual você deseja criar o índice.

<indexName>

Nome do seu índice. Se você omitir o nome do índice, o padrão será vector_index.

<numberOfDimensions>

Número de dimensões vetoriais que o Atlas Vector Search impõe no momento do índice e no momento da query.

<fieldToIndex>

Campos de vetor e filtro para indexar.

Exemplo

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

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

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

Exemplo

python vector-index.py

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

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

Observação

Você pode 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.


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


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

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

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

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

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

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

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

1

clusterName

Nome do cluster do Atlas.

db

Nome do banco de dados no cluster do Atlas que contém sua coleção indexada.

collection

O nome da coleção indexada no banco de dados.

projectId

O identificador exclusivo do projeto.

2
atlas clusters search indexes list --clusterName [cluster_name] --db <db-name> --collection <collection-name>

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

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

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

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

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

1

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.

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

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

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

    A página Clusters é exibida.

2

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

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

    Se você não tiver clusters, clique em Create cluster para criar um. Para saber mais, consulte Criar um cluster.

  2. Se o seu projeto tiver múltiplos clusters, selecione o cluster que deseja utilizar a partir do menu suspenso Select cluster e clique em Go to Atlas Search.

    A página Atlas Search é exibida.

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

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

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

    A página Atlas Search é exibida.

  1. Clique no nome do seu cluster.

  2. Clique na aba Atlas Search.

    A página Atlas Search é exibida.

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

Nome

Etiqueta que identifica o índice.

Tipo de índice

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

  • search para índices do Atlas Search.

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

Campos do índice

Lista que contém os campos que este índice indexa.

Status

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 vectorSearch. Se você clicar no Query botão, o Atlas Vector Search exibirá uma amostra que você pode copiar, modificar e executar na UI do Atlas e utilizando $vectorSearch outros clientes suportados.

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

1

Para saber mais, consulte Conectar via mongosh.

2
3

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

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

Para visualizar os índices do Atlas Vector Search para uma coleção usando o driver C# 3.1.0 ou posterior, execute as seguintes etapas:

1
1namespace query_quick_start;
2
3using MongoDB.Bson;
4using MongoDB.Driver;
5
6public 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}
2

<connectionString>

Sua connection string do Atlas. Para saber mais, consulte Conectar via Drivers.

<databaseName>

O nome do banco de dados que contém a coleção.

<collectionName>

O nome da collection.

3
using query_quick_start;
var indexService = new IndexService();
indexService.ViewSearchIndexes();
4
dotnet run

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:

1
1package main
2
3import (
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
14func main() {
15 ctx := context.Background()
16
17 // Replace the placeholder with your Atlas connection string
18 const uri = "<connectionString>"
19
20 // Connect to your Atlas cluster
21 clientOptions := options.Client().ApplyURI(uri)
22 client, err := mongo.Connect(clientOptions)
23 if err != nil {
24 log.Fatalf("failed to connect to the server: %v", err)
25 }
26 defer func() { _ = client.Disconnect(ctx) }()
27
28 // Set the namespace
29 coll := client.Database("<databaseName>").Collection("<collectionName>")
30
31 // Specify the options for the index to retrieve
32 indexName := "<indexName>"
33 opts := options.SearchIndexes().SetName(indexName)
34
35 // Get the index
36 cursor, err := coll.SearchIndexes().List(ctx, opts)
37 if err != nil {
38 log.Fatalf("failed to get the index: %v", err)
39 }
40
41 // Print the index details to the console as JSON
42 var results []bson.M
43 if err := cursor.All(ctx, &results); err != nil {
44 log.Fatalf("failed to unmarshal results to bson: %v", err)
45 }
46 res, err := json.Marshal(results)
47 if err != nil {
48 log.Fatalf("failed to marshal results to json: %v", err)
49 }
50 fmt.Println(string(res))
51}
2

<connectionString>

Sua connection string do Atlas. Para saber mais, consulte Conectar via Drivers.

<databaseName>

O banco de dados que contém a coleção.

<collectionName>

A collection para a qual você deseja recuperar os índices.

<indexName>

O nome do seu índice se você quiser recuperar um índice específico. Para retornar todos os índices na collection, omita esse valor e remova a chamada para o método SetName() ao criar as opções de índice de pesquisa.

3
go run get-index.go

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:

1
1import com.mongodb.client.MongoClient;
2import com.mongodb.client.MongoClients;
3import com.mongodb.client.MongoCollection;
4import com.mongodb.client.MongoDatabase;
5import org.bson.Document;
6
7public class ViewVectorIndex {
8
9 public static void main(String[] args) {
10
11 // Replace the placeholder with your Atlas connection string
12 String uri = "<connectionString>";
13
14 // Connect to your Atlas cluster
15 try (MongoClient mongoClient = MongoClients.create(uri)) {
16
17 // Set the namespace
18 MongoDatabase database = mongoClient.getDatabase("<databaseName>");
19 MongoCollection<Document> collection = database.getCollection("<collectionName>");
20
21 // Specify the options for the index to retrieve
22 String indexName = "<indexName>";
23
24 // Get the index and print details to the console as JSON
25 try {
26 Document listSearchIndex = collection.listSearchIndexes().name(indexName).first();
27 if (listSearchIndex != null) {
28 System.out.println("Index found: " + listSearchIndex.toJson());
29 } else {
30 System.out.println("Index not found.");
31 }
32 } catch (Exception e) {
33 throw new RuntimeException("Error finding index: " + e);
34 }
35
36 } catch (Exception e) {
37 throw new RuntimeException("Error connecting to MongoDB: " + e);
38 }
39 }
40}
2

<connectionString>

Sua connection string do Atlas. Para saber mais, consulte Conectar via Drivers.

<databaseName>

O banco de dados que contém a coleção.

<collectionName>

A collection para a qual você deseja recuperar os índices.

<indexName>

O nome do seu índice se você quiser recuperar um índice específico. Para retornar todos os índices da collection, omita este valor.

3

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

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

1
1const { MongoClient } = require("mongodb");
2
3// connect to your Atlas deployment
4const uri = "<connectionString>";
5
6const client = new MongoClient(uri);
7
8async function run() {
9 try {
10 const database = client.db("<databaseName>");
11 const collection = database.collection("<collectionName>");
12
13 // run the helper method
14 const result = await collection.listSearchIndexes("<indexName>").toArray();
15 console.log(result);
16 } finally {
17 await client.close();
18 }
19}
20run().catch(console.dir);
2

<connectionString>

Sua connection string do Atlas. Para saber mais, consulte Conectar via Drivers.

<databaseName>

O banco de dados que contém a coleção.

<collectionName>

A collection para a qual você deseja recuperar os índices.

<indexName>

O nome do seu índice se você quiser recuperar um índice específico. Para retornar todos os índices da collection, omita este valor.

3
node <file-name>.js

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:

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

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

2

<connectionString>

Sua connection string do Atlas. Para saber mais, consulte Conectar via Drivers.

<databaseName>

O nome do banco de dados que contém a coleção.

<collectionName>

O nome da collection.

3
python <file-name>.py

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

Importante

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

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.


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


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

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

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

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

1

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

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

<name-of-database>

Banco de dados que contém a collection para a qual você deseja criar o índice.

<name-of-collection>

Coleção para a qual você deseja criar o índice.

<index-name>

Nome do seu índice. Se você omitir o nome do índice, o Atlas Vector Search nomeará o índice vector_index.

<number-of-dimensions>

Número de dimensões vetoriais que o Atlas Vector Search impõe no momento do índice e no momento da query.

<field-to-index>

Campos de vetor e filtro para indexar.

3
atlas clusters search indexes update <indexId> --clusterName [cluster_name] --file [vector-_index].json

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

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

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

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

1

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.

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

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

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

    A página Clusters é exibida.

2

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

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

    Se você não tiver clusters, clique em Create cluster para criar um. Para saber mais, consulte Criar um cluster.

  2. Se o seu projeto tiver múltiplos clusters, selecione o cluster que deseja utilizar a partir do menu suspenso Select cluster e clique em Go to Atlas Search.

    A página Atlas Search é exibida.

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

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

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

    A página Atlas Search é exibida.

  1. Clique no nome do seu cluster.

  2. Clique na aba Atlas Search.

    A página Atlas Search é exibida.

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

  2. Clique em na coluna Actions para esse índice.

  3. Selecione Edit With Visual Editor para uma experiência guiada ou Edit With JSON Editor para editar a definição do índice bruto.

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

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

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

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

1

Para saber mais, consulte Conectar via mongosh.

2
3

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

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

Para atualizar um índice do Atlas Vector Search para uma coleção usando o driver C# 3.1.0 ou posterior, execute as seguintes etapas:

1
1namespace query_quick_start;
2
3using MongoDB.Bson;
4using MongoDB.Driver;
5
6public 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}
2

<connectionString>

Connection string do Atlas. Para saber mais, consulte Conectar via drivers.

<databaseName>

Banco de dados que contém a collection para a qual você deseja criar o índice.

<collectionName>

Coleção para a qual você deseja criar o índice.

<indexName>

Bame do seu índice. Se você omitir o nome do índice, o padrão será vector_index.

<numberOfDimensions>

Número de dimensões vetoriais que o Atlas Vector Search impõe no momento do índice e no momento da query.

<fieldToIndex>

Campos de vetor e filtro para indexar.

3
using query_quick_start;
var indexService = new IndexService();
indexService.EditVectorIndex();
4
dotnet run

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:

1
1package main
2
3import (
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
12func main() {
13 ctx := context.Background()
14
15 // Replace the placeholder with your Atlas connection string
16 const uri = "<connection-string>"
17
18 // Connect to your Atlas cluster
19 clientOptions := options.Client().ApplyURI(uri)
20 client, err := mongo.Connect(clientOptions)
21 if err != nil {
22 log.Fatalf("failed to connect to the server: %v", err)
23 }
24 defer func() { _ = client.Disconnect(ctx) }()
25
26 // Set the namespace
27 coll := client.Database("<databaseName>").Collection("<collectionName>")
28 indexName := "<indexName>"
29
30 type vectorDefinitionField struct {
31 Type string `bson:"type"`
32 Path string `bson:"path"`
33 NumDimensions int `bson:"numDimensions"`
34 Similarity string `bson:"similarity"`
35 }
36
37 type vectorDefinition struct {
38 Fields []vectorDefinitionField `bson:"fields"`
39 }
40
41 definition := vectorDefinition{
42 Fields: []vectorDefinitionField{{
43 Type: "vector",
44 Path: "<fieldToIndex>",
45 NumDimensions: <numberOfDimensions>,
46 Similarity: "euclidean | cosine | dotProduct"}},
47 }
48 err = coll.SearchIndexes().UpdateOne(ctx, indexName, definition)
49
50 if err != nil {
51 log.Fatalf("failed to update the index: %v", err)
52 }
53
54 fmt.Println("Successfully updated the search index")
55}
2

<connectionString>

Connection string do Atlas. Para saber mais, consulte Conectar via drivers.

<databaseName>

Banco de dados que contém a collection para a qual você deseja criar o índice.

<collectionName>

Coleção para a qual você deseja criar o índice.

<indexName>

Nome do seu índice. Se você omitir o nome do índice, o padrão será vector_index.

<numberOfDimensions>

Número de dimensões vetoriais que o Atlas Vector Search impõe no momento do índice e no momento da query.

<fieldToIndex>

Campos de vetor e filtro para indexar.

3
go run edit-index.go

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

1
1import com.mongodb.client.MongoClient;
2import com.mongodb.client.MongoClients;
3import com.mongodb.client.MongoCollection;
4import com.mongodb.client.MongoDatabase;
5import org.bson.Document;
6import org.bson.conversions.Bson;
7
8import java.util.Collections;
9
10public class EditVectorIndex {
11
12 public static void main(String[] args) {
13
14 // Replace the placeholder with your Atlas connection string
15 String uri = "<connectionString>";
16
17 // Connect to your Atlas cluster
18 try (MongoClient mongoClient = MongoClients.create(uri)) {
19
20 // Set the namespace
21 MongoDatabase database = mongoClient.getDatabase("<databaseName>");
22 MongoCollection<Document> collection = database.getCollection("<collectionName>");
23
24 // Define the index changes
25 String indexName = "<indexName>";
26 Bson definition = new Document(
27 "fields",
28 Collections.singletonList(
29 new Document("type", "vector")
30 .append("path", "<fieldToIndex>")
31 .append("numDimensions", "<numberOfDimensions>")
32 .append("similarity", "euclidean | cosine | dotProduct")
33 .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}
2

<connectionString>

Connection string do Atlas. Para saber mais, consulte Conectar via drivers.

<databaseName>

Banco de dados que contém a collection para a qual você deseja criar o índice.

<collectionName>

Coleção para a qual você deseja criar o índice.

<indexName>

Nome do seu índice. Se você omitir o nome do índice, o padrão será vector_index.

<numberOfDimensions>

Número de dimensões vetoriais que o Atlas Vector Search impõe no momento do índice e no momento da query.

<fieldToIndex>

Campos de vetor e filtro para indexar.

3

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

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

1
1const { MongoClient } = require("mongodb");
2
3// connect to your Atlas deployment
4const uri = "<connection-string>";
5
6const client = new MongoClient(uri);
7
8async function run() {
9 try {
10 const database = client.db("<databaseName>");
11 const collection = database.collection("<collectionName>");
12
13 // define your Atlas Search index
14 const index = {
15 name: "<indexName>",
16 type: "vectorSearch",
17 //updated search index definition
18 definition: {
19 "fields": [
20 {
21 "type": "vector",
22 "numDimensions": <numberOfDimensions>,
23 "path": "<field-to-index>",
24 "similarity": "euclidean | cosine | dotProduct"
25 },
26 {
27 "type": "filter",
28 "path": "<fieldToIndex>"
29 },
30 ...
31 ]
32 }
33 }
34
35 // run the helper method
36 await collection.updateSearchIndex("<index-name>", index);
37 } finally {
38 await client.close();
39 }
40}
41run().catch(console.dir);
2

<connectionString>

Connection string do Atlas. Para saber mais, consulte Conectar via drivers.

<databaseName>

Banco de dados que contém a collection para a qual você deseja criar o índice.

<collectionName>

Coleção para a qual você deseja criar o índice.

<indexName>

Nome do seu índice. Se você omitir o nome do índice, o padrão será vector_index.

<numberOfDimensions>

Número de dimensões vetoriais que o Atlas Vector Search impõe no momento do índice e no momento da query.

<fieldToIndex>

Campos de vetor e filtro para indexar.

3
node <file-name>.js

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:

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

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

2

<connectionString>

Connection string do Atlas. Para saber mais, consulte Conectar via drivers.

<databaseName>

Banco de dados que contém a collection para a qual você deseja criar o índice.

<collectionName>

Coleção para a qual você deseja criar o índice.

<indexName>

Bame do seu índice. Se você omitir o nome do índice, o padrão será vector_index.

<numberOfDimensions>

Número de dimensões vetoriais que o Atlas Vector Search impõe no momento do índice e no momento da query.

<fieldToIndex>

Campos de vetor e filtro para indexar.

3
python <file-name>.py

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

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

Observação

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


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


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

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

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

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

1

<indexId>

O identificador exclusivo do índice a ser excluído.

<clusterName>

Nome do cluster do Atlas.

<projectId>

O identificador exclusivo do projeto.

2
atlas clusters search indexes delete <indexId> [options]

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

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

1

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.

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

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

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

    A página Clusters é exibida.

2

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

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

    Se você não tiver clusters, clique em Create cluster para criar um. Para saber mais, consulte Criar um cluster.

  2. Se o seu projeto tiver múltiplos clusters, selecione o cluster que deseja utilizar a partir do menu suspenso Select cluster e clique em Go to Atlas Search.

    A página Atlas Search é exibida.

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

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

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

    A página Atlas Search é exibida.

  1. Clique no nome do seu cluster.

  2. Clique na aba Atlas Search.

    A página Atlas Search é exibida.

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

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

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

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

1

Para saber mais, consulte Conectar via mongosh.

2
3

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

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

Para excluir um índice do Atlas Vector Search para uma coleção usando o driver C# 3.1.0 ou posterior, execute as seguintes etapas:

1
1namespace query_quick_start;
2
3using MongoDB.Bson;
4using MongoDB.Driver;
5
6public 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}
2

<connectionString>

Sua connection string do Atlas. Para saber mais, consulte Conectar via Drivers.

<databaseName>

O nome do banco de dados que contém a coleção.

<collectionName>

O nome da collection.

<indexName>

O nome do índice a ser excluído.

3
using query_quick_start;
var indexService = new IndexService();
indexService.DeleteVectorIndex();
4
dotnet run

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:

1
1package main
2
3import (
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
12func main() {
13 ctx := context.Background()
14
15 // Replace the placeholder with your Atlas connection string
16 const uri = "<connectionString>"
17
18 // Connect to your Atlas cluster
19 clientOptions := options.Client().ApplyURI(uri)
20 client, err := mongo.Connect(clientOptions)
21 if err != nil {
22 log.Fatalf("failed to connect to the server: %v", err)
23 }
24 defer func() { _ = client.Disconnect(ctx) }()
25
26 // Set the namespace
27 coll := client.Database("<databaseName>").Collection("<collectionName>")
28 indexName := "<indexName>"
29
30 err = coll.SearchIndexes().DropOne(ctx, indexName)
31 if err != nil {
32 log.Fatalf("failed to delete the index: %v", err)
33 }
34
35 fmt.Println("Successfully deleted the Vector Search index")
36}
2

<connectionString>

Sua connection string do Atlas. Para saber mais, consulte Conectar via Drivers.

<databaseName>

O banco de dados que contém a collection para a qual você deseja criar o índice.

<collectionName>

A collection para a qual você deseja criar o índice.

<indexName>

O nome do seu índice. Se você omitir o nome do índice, o padrão será vector_index.

3
go run delete-index.go

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:

1
1import com.mongodb.client.MongoClient;
2import com.mongodb.client.MongoClients;
3import com.mongodb.client.MongoCollection;
4import com.mongodb.client.MongoDatabase;
5import org.bson.Document;
6
7public class DeleteIndex {
8
9 public static void main(String[] args) {
10
11 // Replace the placeholder with your Atlas connection string
12 String uri = "<connectionString>";
13
14 // Connect to your Atlas cluster
15 try (MongoClient mongoClient = MongoClients.create(uri)) {
16
17 // Set the namespace
18 MongoDatabase database = mongoClient.getDatabase("<databaseName>");
19 MongoCollection<Document> collection = database.getCollection("<collectionName>");
20
21 // Specify the index to delete
22 String indexName = "<indexName>";
23
24 try {
25 collection.dropSearchIndex(indexName);
26 } catch (Exception e) {
27 throw new RuntimeException("Error deleting index: " + e);
28 }
29
30 } catch (Exception e) {
31 throw new RuntimeException("Error connecting to MongoDB: " + e);
32 }
33 }
34}
2

<connectionString>

Sua connection string do Atlas. Para saber mais, consulte Conectar via Drivers.

<databaseName>

O banco de dados que contém a collection para a qual você deseja criar o índice.

<collectionName>

A collection para a qual você deseja criar o índice.

<indexName>

O nome do seu índice. Se você omitir o nome do índice, o padrão será vector_index.

3

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

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

1
1const { MongoClient } = require("mongodb");
2
3// connect to your Atlas deployment
4const uri = "<connectionString>";
5
6const client = new MongoClient(uri);
7
8async function run() {
9 try {
10 const database = client.db("<databaseName>");
11 const collection = database.collection("<collectionName>");
12
13 // run the helper method
14 await collection.dropSearchIndex("<indexName>");
15
16 } finally {
17 await client.close();
18 }
19}
20run().catch(console.dir);
2

<connectionString>

Sua connection string do Atlas. Para saber mais, consulte Conectar via Drivers.

<databaseName>

O banco de dados que contém a collection para a qual você deseja criar o índice.

<collectionName>

A collection para a qual você deseja criar o índice.

<indexName>

O nome do seu índice. Se você omitir o nome do índice, o padrão será vector_index.

3
node <file-name>.js

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:

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

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

2

<connectionString>

Sua connection string do Atlas. Para saber mais, consulte Conectar via Drivers.

<databaseName>

O nome do banco de dados que contém a coleção.

<collectionName>

O nome da collection.

<indexName>

O nome do índice a ser excluído.

3
python <file-name>.py

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

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

Status
Descrição

Não iniciado

Atlas ainda não começou a construir o índice.

Sincronização inicial

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

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

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

Ativo

O índice está pronto para uso.

Recuperando

A denúncia encontrou um erro. Esse estado geralmente ocorre quando o ponto de replicação atual não está mais disponível no oplog mongod. Você ainda pode fazer query no índice existente até que ele atualize e seu status mude para Active. Use o erro na janela modal View status details para solucionar o problema. Para saber mais, consulte Corrigir problemas.

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.