Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Menu Docs
Página inicial do Docs
/ / /
Driver C
/ /

Índices de pesquisa do Atlas

Neste guia, você pode aprender como gerenciar programaticamente seus índices do Atlas Search e do Atlas Vector Search usando o C driver.

O recurso Atlas Search permite realizar pesquisas de texto completo em coleções hospedadas no MongoDB Atlas. Para saber mais sobre o Atlas Search, consulte a Visão geral do Atlas Search na documentação do Atlas.

O Atlas Vector Search permite que você realize pesquisas semânticas em incorporações vetoriais armazenadas no MongoDB Atlas. Para aprender mais sobre o Atlas Vector Search, veja a Visão geral do Atlas Vector Search na documentação do Atlas.

As seções a seguir fornecem exemplos de código que demonstram como criar, listar, atualizar e excluir índices do Atlas Search e Vector Search.

Para criar um índice de Atlas Search ou de pesquisa vetorial, passe o comando createSearchIndexes para a função mongoc_collection_command_simple(). Você pode usar este comando para criar um ou vários índices.

O seguinte exemplo de código mostra como criar um índice Atlas Search:

bson_t cmd;
bson_error_t error;
char *cmd_str = bson_strdup_printf (
BSON_STR ({
"createSearchIndexes" : "%s",
"indexes" : [ {"definition" : {"mappings" : {"dynamic" : false}}, "name" : "<index name>"} ]
}),
"<collection name>");
bson_init_from_json (&cmd, cmd_str, -1, &error);
bson_free (cmd_str);
if (mongoc_collection_command_simple (collection, &cmd, NULL, NULL, &error)) {
printf ("Successfully created search index\n");
} else {
fprintf (stderr, "Failed to create search index: %s", error.message);
}
bson_destroy (&cmd);

O seguinte exemplo de código mostra como criar um índice do Atlas Vector Search:

bson_t cmd;
bson_error_t error;
char * cmd_str = bson_strdup_printf(
BSON_STR({
"createSearchIndexes": "%s",
"indexes": [{
"name": "<index name>",
"type": "vectorSearch",
"definition": {
"fields": [{
"type": "vector",
"path": "plot_embedding",
"numDimensions": 1536,
"similarity": "euclidean"
}]
}
}]
}),
"<collection name>"
);
bson_init_from_json(&cmd, cmd_str, -1, &error);
bson_free(cmd_str);
if (mongoc_collection_command_simple(collection, &cmd, NULL, NULL, &error)) {
printf("Successfully created Vector Search index\n");
} else {
fprintf(stderr, "Failed to create Vector Search index: %s", error.message);
}
bson_destroy(&cmd);

O seguinte exemplo de código mostra como criar ambos os índices de pesquisa em uma chamada para a função mongoc_collection_command_simple():

bson_t cmd;
bson_error_t error;
char * cmd_str = bson_strdup_printf(
BSON_STR({
"createSearchIndexes": "%s",
"indexes": [{
"definition": {
"mappings": {
"dynamic": false
}
},
"name": "<Atlas Search index name>"
},
{
"name": "<Vector Search index name>",
"type": "vectorSearch",
"definition": {
"fields": [{
"type": "vector",
"path": "plot_embedding",
"numDimensions": 1536,
"similarity": "euclidean"
}]
}
}
]
}),
"<collection name>");
bson_init_from_json(&cmd, cmd_str, -1, &error);
bson_free(cmd_str);
if (mongoc_collection_command_simple(collection, &cmd, NULL, NULL, &error)) {
printf("Successfully created search indexes\n");
} else {
fprintf(stderr, "Failed to create search indexes: %s", error.message);
}
bson_destroy(&cmd);

Para saber mais sobre a sintaxe usada para definir cada índice de pesquisa, consulte os seguintes guias na documentação do Atlas:

Você pode passar o estágio de agregação $listSearchIndexes para a função mongoc_collection_aggregate() para retornar todos os índices do Atlas Search e do Vector Search em uma coleção.

O exemplo de código a seguir mostra como imprimir uma lista dos índices de pesquisa de uma coleção:

bson_t pipeline;
const bson_t *doc;
bson_error_t error;
const char *pipeline_str = BSON_STR ({"pipeline" : [ {"$listSearchIndexes" : {}} ]});
bson_init_from_json (&pipeline, pipeline_str, -1, &error);
mongoc_cursor_t *cursor =
mongoc_collection_aggregate (collection, MONGOC_QUERY_NONE, &pipeline, NULL, NULL);
while (mongoc_cursor_next (cursor, &doc)) {
char *str = bson_as_canonical_extended_json (doc, NULL);
printf ("%s\n", str);
bson_free (str);
}
bson_destroy (&pipeline);
mongoc_cursor_destroy (cursor);

Você pode passar o comando updateSearchIndex para a função mongoc_collection_command_simple() para atualizar um índice do Atlas Search ou Vector Search.

O código a seguir mostra como atualizar o índice do Atlas Search criado na seção Criar um índice de pesquisa deste guia para usar mapeamentos dinâmicos:

bson_t cmd;
bson_error_t error;
char *cmd_str = bson_strdup_printf (
BSON_STR ({
"updateSearchIndex" : "%s",
"definition" : {"mappings" : {"dynamic" : true}}, "name" : "<index name>"}),
"<collection name>");
bson_init_from_json (&cmd, cmd_str, -1, &error);
bson_free (cmd_str);
if (mongoc_collection_command_simple (collection, &cmd, NULL, NULL, &error)) {
printf ("Successfully updated search index\n");
} else {
fprintf (stderr, "Failed to create search index: %s", error.message);
}
bson_destroy (&cmd);

O código a seguir mostra como atualizar o índice do Atlas Vector Search criado na seção Criar um Índice de Pesquisa deste guia para utilizar a função de similaridade cosine:

bson_t cmd;
bson_error_t error;
char * cmd_str = bson_strdup_printf(
BSON_STR({
"updateSearchIndex": "%s",
"name": "<index name>",
"definition": {
"fields": [{
"type": "vector",
"path": "plot_embedding",
"numDimensions": 1536,
"similarity": "cosine"
}]
}
}),
"<collection name>"
);
bson_init_from_json(&cmd, cmd_str, -1, &error);
bson_free(cmd_str);
if (mongoc_collection_command_simple(collection, &cmd, NULL, NULL, &error)) {
printf("Successfully updated search index\n");
} else {
fprintf(stderr, "Failed to create search index: %s", error.message);
}
bson_destroy(&cmd);

Você pode passar o comando dropSearchIndexes para a função mongoc_collection_command_simple() para excluir um índice de pesquisa do Atlas Search ou Vector Search.

O seguinte código mostra como excluir um índice de pesquisa de uma coleção:

bson_t cmd;
bson_error_t error;
char *cmd_str = bson_strdup_printf (
BSON_STR ({
"dropSearchIndexes" : "%s",
"index" : "<index name>"
}),
"<collection name>");
bson_init_from_json (&cmd, cmd_str, -1, &error);
if (mongoc_collection_command_simple (collection, &cmd, NULL, NULL, &error)) {
printf ("Successfully deleted search index\n");
} else {
fprintf (stderr, "Failed to delete search index: %s", error.message);
}
bson_destroy (&cmd);

Para aprender mais sobre o Atlas Search do MongoDB, consulte Índices do Atlas Search na documentação do Atlas.

Para saber mais sobre o Atlas Vector Search do MongoDB, consulte Como indexar campos para o Vector Search na documentação do Atlas.

Para saber mais sobre qualquer uma das funções discutidas nesta guia, consulte a seguinte documentação da API:

Voltar

Multikey Indexes

Nesta página