Visão geral
Neste guia, você pode aprender como criar e gerenciar índices de pesquisa MongoDB e índices de pesquisa MongoDB Vector. Esses índices permitem usar as seguintes funcionalidades:
MongoDB pesquisa: realize pesquisas rápidas e de texto completo
pesquisa vetorial MongoDB: Executa pesquisas semânticas (semelhança) em incorporações vetoriais
Os índices MongoDB Pesquisa e MongoDB Vector Pesquisa especificam quais campos indexar, especificam como esses campos são indexados e definem outras configurações opcionais.
Observação
Os métodos de gerenciamento de índice de pesquisa do MongoDB Search são executados de forma assíncrona. Os métodos do driver podem retornar um resultado antes que a ação desejada seja concluída no servidor.
Este guia explica como executar as seguintes ações para gerenciar seus índices de pesquisa MongoDB e índices de pesquisa vetorial MongoDB:
Observação
Dados de amostra
Os exemplos deste guia usam a coleção embedded_movies no banco de dados sample_mflix , que é um dos conjuntos de dados de amostra do Atlas . Para obter instruções sobre como importar os dados de amostra do Atlas, consulte Carregar dados de amostra na documentação do Atlas.
Crie um modelo de índice de pesquisa
As seções a seguir descrevem como criar modelos de índice para índices MongoDB Search e MongoDB Vector Search.
Modelo de MongoDB Search índice
Para criar um índice do MongoDB Search, você deve construir uma instância do CreateSearchIndexModel que defina suas especificações de índice.
A classe CreateSearchIndexModel tem as seguintes propriedades:
Propriedade | Tipo | Descrição |
|---|---|---|
|
| Especifica a definição do índice. Se você omitir essa configuração, o driver criará um índice de pesquisa com mapeamentos dinâmicos. |
|
| Define o nome do índice. Se você omitir esta configuração, o driver definirá o nome para |
|
| Define o tipo de índice. Se você omitir essa configuração, o driver criará um índice de pesquisa por padrão. |
O exemplo seguinte cria uma instância CreateSearchIndexModel para fornecer especificações para um índice denominado search_idx. O código especifica mapeamentos estáticos dos campos title e released:
var def = new BsonDocument { { "mappings", new BsonDocument { { "dynamic", false }, { "fields", new BsonDocument { { "title", new BsonDocument { {"type", "string" } } }, { "released", new BsonDocument { { "type", "date" } } } } } } } }; var indexModel = new CreateSearchIndexModel( "search_idx", SearchIndexType.Search, def );
Para saber mais sobre mapeamentos de campo do MongoDB pesquisa, veja Definir mapeamentos de campo na documentação do Atlas.
Modelo de índice de MongoDB Vector Search
Para criar um índice do MongoDB Vector Search, você deve construir uma instância do CreateVectorSearchIndexModel que defina suas especificações de índice.
A classe CreateVectorSearchIndexModel herda da classe CreateSearchIndexModel e tem as seguintes propriedades adicionais:
Propriedade | Tipo | Descrição |
|---|---|---|
|
| Especifica o campo que contém os vetores para indexar. |
|
| Define a função de similaridade vetorial a ser usada para pesquisa de K- vizinhos mais próximos. |
|
| Especifica o número de dimensões que a pesquisa impõe no momento do índice e no momento da query. |
|
| Especifica os campos que a pesquisa utiliza como filtros na query vetorial. |
|
| Especifica o tipo de quantização vetorial automática para os vetores de pesquisa. Se você não definir essa propriedade, a pesquisa não usará quantização automática. |
|
| Define o número máximo de bordas que um nó pode ter no grafo Hierarchical Navigable Small Worlds. |
|
| Define o número máximo de nós a serem avaliados para encontrar os vizinhos mais próximos para se conectar a um novo nó. |
O exemplo seguinte cria uma instância CreateVectorSearchIndexModel para fornecer especificações para um índice denominado vs_idx. O código especifica o caminho de incorporação como PlotEmbedding, uma propriedade de classe que corresponde ao campo plot_embedding em MongoDB. Ele também indexa 1536 dimensões e usa a função de similaridade vetorial Euclidean.
var model = new CreateVectorSearchIndexModel<Movie> ( model => model.PlotEmbedding, "vs_idx", VectorSimilarity.Euclidean, 1536);
Para saber mais sobre como definir índices de pesquisa vetorial do MongoDB, consulte Como indexar campos para pesquisa vetorial na documentação do Atlas.
Modelo de índice de pesquisa com incorporação automática do MongoDB
Você pode utilizar um modelo de índice CreateAutoEmbeddingVectorSearchIndexModel para criar um índice MongoDB Vector Search que gera automaticamente incorporações vetoriais para campos de texto.
O CreateAutoEmbeddingVectorSearchIndexModel tem as seguintes propriedades, além das propriedades herdadas de CreateVectorSearchIndexModelBase<TDocument>:
Propriedade | Tipo | Descrição |
|---|---|---|
|
| Especifica o nome do modelo de incorporação a ser usado para gerar incorporações vetoriais. Para obter uma lista de modelos compatíveis, consulte Incorporações de texto na documentação do VoyageAI. |
|
| Especifica o tipo de dados a serem incorporados. Atualmente, a única forma suportada é |
O exemplo seguinte cria uma instância do CreateAutoEmbeddingVectorSearchIndexModel que fornece especificações para um índice denominado auto_embedded_index. Esse índice usa o modelo de incorporação "voyage-4" para gerar automaticamente incorporações vetoriais para o campo plot e também inclui filtros opcionais para os campos runtime e year:
var model = new CreateAutoEmbeddingVectorSearchIndexModel<EmbeddedMovie>( m => m.Plot, "auto_embedding_index", "voyage-4", m => m.Runtime, m => m.Year // Optional filter fields );
Criar um índice de pesquisa
Você pode criar um índice do MongoDB Search ou do MongoDB Vector Search em uma coleção chamando o método SearchIndexes.CreateOne() em uma instância IMongoCollection . Este método aceita um modelo de índice como um parâmetro, especificado em uma instância do CreateSearchIndexModel ou CreateVectorSearchIndexModel.
Exemplo
O exemplo a seguir cria um índice de pesquisa MongoDB na coleção embedded_movies. O código cria um CreateSearchIndexModel que define o nome do índice e habilita o mapeamento dinâmico. Em seguida, o código passa a instância CreateSearchIndexModel para o método SearchIndexes.CreateOne() para criar o índice de pesquisa MongoDB :
var indexModel = new CreateSearchIndexModel( "example_index", SearchIndexType.Search, new BsonDocument { { "mappings", new BsonDocument { { "dynamic", true }, } } } ); var result = movieCollection.SearchIndexes.CreateOne(indexModel); Console.WriteLine("Created MongoDB Search index:\n{0}", result);
Created MongoDB Search index: "example_index"
Criar múltiplos índices de pesquisa
Você pode criar vários índices do MongoDB Search e do MongoDB Vector Search chamando o método SearchIndexes.CreateMany() em uma instância IMongoCollection. Este método aceita um IEnumerable de CreateSearchIndexModel ou CreateVectorSearchIndexModel instâncias como um parâmetro.
Exemplo
Este exemplo executa as seguintes ações:
Cria uma instância
CreateSearchIndexModelque especifica um índice de pesquisa chamadoas_idxCria uma instância
CreateVectorSearchIndexModelque especifica um índice do MongoDB pesquisa vetorial chamadovs_idxPassa um
Listdas instânciasCreateSearchIndexModeleCreateVectorSearchIndexModelpara o métodoSearchIndexes.CreateMany()Cria os índices de pesquisa MongoDB Search e MongoDB Vector Search na coleção
embedded_movies
var searchModel = new CreateSearchIndexModel( "as_idx", SearchIndexType.Search, new BsonDocument { { "mappings", new BsonDocument { { "dynamic", true }, } } } ); var vectorModel = new CreateVectorSearchIndexModel<Movie>( m => m.PlotEmbedding, "vs_idx", VectorSimilarity.Euclidean, 1536); var models = new List<CreateSearchIndexModel> { searchModel, vectorModel }; var indexes = movieCollection.SearchIndexes.CreateMany(models); Console.WriteLine("Created Search indexes:\n{0} {1}", indexes.ToArray());
Created Search indexes: as_idx vs_idx
Listar índices de pesquisa
Você pode acessar informações sobre os índices de pesquisa MongoDB e MongoDB Vector Search existentes de uma coleção chamando o método SearchIndexes.List() na coleção.
Exemplo
O exemplo a seguir acessa informações sobre os índices de pesquisa MongoDB e os índices de pesquisa vetorial MongoDB criados na Criar vários índices de pesquisa desta página. O código chama o método SearchIndexes.List() e imprime uma lista dos índices de pesquisa MongoDB pesquisa e MongoDB Vector pesquisa na coleção:
var indexesList = movieCollection.SearchIndexes.List().ToList(); foreach (var i in indexesList) { Console.WriteLine(i); }
{ "id": "...", "name": "as_idx", "status": "READY", "queryable": true, "latestDefinitionVersion": {...}, "latestDefinition": { "mappings": { "dynamic": true } }, "statusDetail": [...] } { "id": "...", "name": "vs_idx", "type": "vectorSearch", "status": "READY", "queryable": true, ..., "latestDefinition": { "fields": [{ "type": "vector", "path": "plot_embedding", "numDimensions": 1536, "similarity": "euclidean" }] }, "statusDetail": [...] }
Atualizar um Índice de Pesquisa
Você pode atualizar um índice da MongoDB pesquisa ou da MongoDB pesquisa vetorial chamando o método SearchIndexes.Update() em uma instância IMongoCollection. Este método aceita os seguintes parâmetros:
Nome do índice a ser atualizado
Documento de definição de índice modificado
Exemplo
O exemplo a seguir atualiza o índice do Vector Search denominado vs_index criado na seção Criar vários índices de pesquisa desta página. O código cria um novo documento de definição de índice que instrui o índice a usar "dotProduct" como a função de similaridade vetorial. Em seguida, o código chama o método SearchIndexes.Update() para atualizar o índice:
var updatedDef = new BsonDocument { { "fields", new BsonArray { new BsonDocument { { "type", "vector" }, { "path", "plot_embedding" }, { "numDimensions", 1536 }, { "similarity", "dotProduct" } } } } }; movieCollection.SearchIndexes.Update("vs_index", updatedDef);
Excluir um índice de pesquisa
Você pode excluir um índice da MongoDB pesquisa ou da MongoDB pesquisa vetorial chamando o método SearchIndexes.DropOne() em uma instância IMongoCollection. Este método aceita o nome do índice a ser excluído como um parâmetro.
Exemplo
O exemplo seguinte excluir o índice de pesquisa do MongoDB denominado example_index criado na seção Criar um Índice de Pesquisa desta página. O código passa o nome do índice para o método SearchIndexes.DropOne() para excluir o índice:
movieCollection.SearchIndexes.DropOne("example_index");
Informações adicionais
Para saber mais sobre outros índices que você pode criar usando o driver .NET/C#, consulte o guia Criar e gerenciar índices.
Para aprender mais sobre a pesquisa MongoDB, consulte a seguinte documentação do Atlas:
Para saber mais sobre MongoDB pesquisa vetorial, consulte a seguinte documentação do Atlas:
Documentação da API
Para saber mais sobre os métodos e tipos mencionados neste guia, consulte a documentação da API abaixo: