개요
이 가이드 에서는 C 운전자 사용하여 MongoDB Search 및 MongoDB Vector Search 인덱스를 프로그래밍 방식으로 관리 방법을 학습 수 있습니다.
MongoDB Search 기능 사용하면 MongoDB Atlas 에서 호스팅되는 컬렉션에서 전체 텍스트 검색을 수행할 수 있습니다. MongoDB Search에 대해 자세히 학습 Atlas 설명서에서MongoDB Search 개요를 참조하세요.
MongoDB Vector Search를 사용하면 MongoDB Atlas 에 저장된 벡터 임베딩에 대해 시맨틱 검색을 수행할 수 있습니다. MongoDB Vector Search에 대해 자세히 학습 Atlas 설명서에서 MongoDB Vector Search 개요를 참조하세요.
다음 섹션에서는 MongoDB Search 및 MongoDB Vector Search 인덱스를 생성, 나열, 업데이트 및 삭제 방법을 보여주는 코드 예제를 제공합니다.
검색 인덱스 만들기
MongoDB Search 또는 MongoDB Vector Search 인덱스 만들려면 createSearchIndexes 명령을 mongoc_collection_command_simple() 함수에 전달합니다. 이 명령을 사용하여 하나 이상의 인덱스를 만들 수 있습니다.
다음 코드 예시 MongoDB 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);
다음 코드 예시 MongoDB 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);
다음 코드 예시는 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);
각 검색 인덱스를 정의하는 데 사용되는 구문에 대해 자세히 알아보려면 Atlas 문서의 다음 가이드를 참조하세요.
검색 인덱스 나열
$listSearchIndexes 집계 단계를 mongoc_collection_aggregate() 함수에 전달하여 컬렉션 의 모든 MongoDB Search 및 MongoDB Vector Search 인덱스를 반환할 수 있습니다.
다음 코드 예시에서는 컬렉션의 검색 인덱스 목록을 출력하는 방법을 보여줍니다.
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);
검색 인덱스 업데이트
updateSearchIndex 명령을 mongoc_collection_command_simple() 함수에 전달하여 MongoDB Search 또는 MongoDB Vector Search 인덱스 업데이트 수 있습니다.
다음 코드는 동적 매핑을 사용하도록 이 가이드 의 검색 인덱스 만들기 섹션에서 만든 MongoDB Search 인덱스 업데이트 방법을 보여줍니다.
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);
다음 코드는 이 가이드 의 검색 인덱스 만들기 섹션에서 생성된 MongoDB Vector Search 인덱스 업데이트 유사성 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);
검색 인덱스 삭제
dropSearchIndexes 명령을 mongoc_collection_command_simple() 함수에 전달하여 MongoDB Search 또는 MongoDB Vector Search 인덱스 삭제 수 있습니다.
다음 코드에서는 컬렉션에서 검색 인덱스를 삭제하는 방법을 보여줍니다.
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);
추가 정보
MongoDB Search에 대해 자세히 학습 Atlas 설명서에서 MongoDB Search 인덱스를 참조하세요.
MongoDB Vector Search에 대해 자세히 학습 Atlas 설명서에서 MongoDB Vector Search를 위한 필드 인덱싱 방법을 참조하세요.
API 문서
이 가이드 에서 설명하는 함수에 대해 자세히 학습 다음 API 문서를 참조하세요.