Visão geral
Neste guia, você pode aprender a gerenciar programaticamente seus índices de pesquisa MongoDB Search e MongoDB Vector Search usando o driver C.
O recurso MongoDB Search permite realizar pesquisas de texto completo em coleções hospedadas no MongoDB Atlas. Para aprender mais sobre o MongoDB pesquisa, consulte a Visão geral do MongoDB pesquisa na documentação do Atlas.
A pesquisa vetorial do MongoDB permite realizar pesquisas semânticas em incorporações vetoriais armazenadas no MongoDB Atlas. Para saber mais sobre a pesquisa vetorial do MongoDB, consulte a Visão geral da pesquisa vetorial do MongoDB na documentação do Atlas.
As seções a seguir fornecem exemplos de código que demonstram como criar, listar, atualizar e excluir índices de pesquisa MongoDB e índices de pesquisa MongoDB Vector.
Criar um índice de pesquisa
Para criar um índice do MongoDB Search ou do MongoDB Vector Search, passe o comando createSearchIndexes para a função mongoc_collection_command_simple(). Você pode usar esse comando para criar um ou vários índices.
O seguinte exemplo de código mostra como criar um índice de pesquisa MongoDB :
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 MongoDB de pesquisa vetorial:
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": "<MongoDB 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:
Listar índices de pesquisa
Você pode passar o estágio de agregação $listSearchIndexes para a função mongoc_collection_aggregate() para retornar todos os índices de pesquisa do MongoDB Pesquisa e do MongoDB Vector Pesquisa 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);Atualizar um Índice de Pesquisa
Você pode passar o comando updateSearchIndex para a função mongoc_collection_command_simple() para atualizar um índice do MongoDB pesquisa ou do MongoDB pesquisa vetorial.
O código a seguir mostra como atualizar o índice de pesquisa do MongoDB 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 abaixo mostra como atualizar o índice da MongoDB pesquisa vetorial criado na seção Criar um índice de pesquisa deste guia para usar 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);Excluir um índice de pesquisa
Você pode passar o comando dropSearchIndexes para a função mongoc_collection_command_simple() para excluir um índice do MongoDB pesquisa ou do MongoDB pesquisa vetorial.
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);Informações adicionais
Para saber mais sobre o MongoDB pesquisa, consulte Índices de pesquisa do MongoDB na documentação do Atlas.
Para saber mais sobre a pesquisa vetorial do MongoDB, consulte Como indexar campos para a pesquisa vetorial do MongoDB na documentação do Atlas.
Documentação da API
Para saber mais sobre qualquer uma das funções discutidas nesta guia, consulte a seguinte documentação da API: