Menu Docs
Página inicial do Docs
/ /

Índices de Pesquisa do MongoDB e Índices de Pesquisa Vetorial do MongoDB

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:

  • Crie um modelo de índice de pesquisa

  • Criar um índice de pesquisa

  • Criar múltiplos índices de pesquisa

  • Listar índices de pesquisa

  • Atualizar um Índice de Pesquisa

  • Excluir um índice de pesquisa

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.

The following sections describe how to create index models for MongoDB Search and MongoDB Vector Search indexes.

To create a MongoDB Search index, you must construct a CreateSearchIndexModel instance that sets your index specifications.

The CreateSearchIndexModel class has the following properties:

Propriedade
Tipo
Descrição

Definition

BsonDocument

Especifica a definição do índice. Se você omitir essa configuração, o driver criará um índice de pesquisa com mapeamentos dinâmicos.

Name

string

Define o nome do índice. Se você omitir esta configuração, o driver definirá o nome para default.

Type

SearchIndexType

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.

To create a MongoDB Vector Search index, you must construct a CreateVectorSearchIndexModel instance that sets your index specifications.

The CreateVectorSearchIndexModel class inherits from the CreateSearchIndexModel class and has the following additional properties:

Propriedade
Tipo
Descrição

Field

FieldDefinition<TDocument>

Specifies the field that contains the vectors to index.

Similarity

VectorSimilarity

Sets the vector similarity function to use to search for the top K-nearest neighbors.

Dimensions

int

Specifies the number of dimensions that the search enforces at index-time and query-time.

FilterFields

IReadOnlyList<FieldDefinition<TDocument>>

Specifies the fields that the search uses as filters in the vector query.

Quantization

VectorQuantization?

Specifies the type of automatic vector quantization for the search vectors. If you don't set this property, the search uses no automatic quantization.

HnswMaxEdges

int?

Sets the maximum number of edges that a node can have in the Hierarchical Navigable Small Worlds graph.

HnswNumEdgeCandidates

int?

Sets the maximum number of nodes to evaluate to find the closest neighbors to connect to a new node.

The following example creates a CreateVectorSearchIndexModel instance to provide specifications for an index named vs_idx. The code specifies the embedding path as PlotEmbedding, a class property that corresponds to the plot_embedding field in MongoDB. It also indexes 1536 dimensions, and uses the Euclidean vector similarity function.

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.

You can use a CreateAutoEmbeddingVectorSearchIndexModel index model to create a MongoDB Vector Search index that automatically generates vector embeddings for text fields.

The CreateAutoEmbeddingVectorSearchIndexModel has the following properties, in addition to the properties inherited from CreateVectorSearchIndexModelBase<TDocument>:

Propriedade
Tipo
Descrição

AutoEmbeddingModelName

string

Specifies the name of the embedding model to use for generating vector embeddings. For a list of supported models, see Text Embeddings in the VoyageAI documentation.

Modality

VectorEmbeddingModality

Specifies the type of data to embed. Currently, the only supported modality is VectorEmbeddingModality.Text.

The following example creates a CreateAutoEmbeddingVectorSearchIndexModel instance that provides specifications for an index named auto_embedded_index. This index uses the "voyage-4" embedding model to automatically generate vector embeddings for the plot field, and also includes optional filters for the runtime and year fields:

var model = new CreateAutoEmbeddingVectorSearchIndexModel<EmbeddedMovie>(
m => m.Plot,
"auto_embedding_index",
"voyage-4",
m => m.Runtime, m => m.Year // Optional filter fields
);

You can create a MongoDB Search or MongoDB Vector Search index on a collection by calling the SearchIndexes.CreateOne() method on an IMongoCollection instance. This method accepts an index model as a parameter, specified in a CreateSearchIndexModel or CreateVectorSearchIndexModel instance.

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"

You can create multiple MongoDB Search and MongoDB Vector Search indexes by calling the SearchIndexes.CreateMany() method on an IMongoCollection instance. This method accepts an IEnumerable of CreateSearchIndexModel or CreateVectorSearchIndexModel instances as a parameter.

Este exemplo executa as seguintes ações:

  1. Cria uma instância CreateSearchIndexModel que especifica um índice de pesquisa chamado as_idx

  2. Cria uma instância CreateVectorSearchIndexModel que especifica um índice do MongoDB pesquisa vetorial chamado vs_idx

  3. Passes a List of the CreateSearchIndexModel and CreateVectorSearchIndexModel instances to the SearchIndexes.CreateMany() method

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

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.

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": [...] }

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

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);

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.

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");

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:

Para saber mais sobre os métodos e tipos mencionados neste guia, consulte a documentação da API abaixo:

Voltar

Indexes

Nesta página