Docs Menu
Docs Home
/ /

MongoDB 벡터 검색 인덱스

MongoDB Vector Search를 사용하면 MongoDB Atlas 에 저장된 벡터 임베딩에 대해 시맨틱 검색을 수행할 수 있습니다. MongoDB Vector Search 쿼리를 수행하려면 먼저 인덱스 할 필드와 인덱싱 방법을 지정하는 인덱스를 만들어야 합니다.

MongoDB Vector Search에 대해 자세히 학습 MongoDB Vector Search 문서에서 MongoDB Vector Search 개요를 참조하세요.

movies sample_mflix 이 가이드 의 예제에서는 Atlas 샘플 데이터 세트의 데이터베이스 에 있는 컬렉션 사용합니다. 무료 MongoDB Atlas cluster 생성하고 샘플 데이터 세트를 로드하는 방법을 학습하려면 MongoDB 시작하기 가이드를 참조하세요.

C++ 애플리케이션 에서 sample_mflix 컬렉션 에 대한 MongoDB Vector Search 인덱스를 관리 하려면 먼저 Atlas cluster 에 연결하는 mongocxx::client 를 인스턴스화하고 dbcollection 변수에 다음 값을 할당합니다.

auto db = client["sample_mflix"];
auto collection = db["movies"];

그런 다음 collection 변수에서 search_indexes() 메서드를 호출하여 컬렉션 에서 mongocxx::search_index_view 를 인스턴스화합니다.

auto siv = collection.search_indexes();

mongocxx::search_index_view 클래스에는 MongoDB Vector Search 인덱스와 상호 작용 수 있는 다음 멤버 함수가 포함되어 있습니다.

  • create_one(): 지정된 구성으로 MongoDB Vector Search 인덱스 생성합니다.

  • list(): 컬렉션 의 MongoDB 벡터 검색 및 검색 인덱스 목록을 가리키는 mongocxx::cursor 객체 반환합니다.

  • update_one(): 지정된 MongoDB Vector Search 인덱스 의 정의를 업데이트합니다.

  • drop_one(): 컬렉션 에서 지정된 인덱스 제거합니다.

다음 섹션에서는 각 MongoDB Vector Search 인덱스 관리 메서드를 사용하는 방법을 보여주는 코드 예제를 제공합니다.

참고

MongoDB Vector Search 인덱스 관리는 비동기식입니다.

MongoDB C++ 드라이버 MongoDB Vector Search 인덱스를 비동기적으로 관리합니다. 다음 섹션에서 설명하는 라이브러리 메서드는 서버 응답을 즉시 반환하지만 MongoDB Vector Search 인덱스에 대한 변경 사항은 배경 에서 수행되며 잠시 후까지 완료되지 않을 수 있습니다.

컬렉션 에 단일 MongoDB Vector Search 인덱스 생성하려면 mongocxx::search_index_view 객체 에서 create_one() 메서드를 호출하고 생성하려는 인덱스 지정하는 mongocxx::search_index_model 객체 전달합니다.

mongocxx::search_index_model 생성자에는 다음 인수가 필요합니다.

  • name: 인덱스 의 이름을 지정하는 문자열

  • definition: 인덱스 에서 필드를 구성하는 방법을 지정하는 문서

MongoDB Vector Search 인덱스 에서 구성할 수 있는 필드의 전체 목록은 MongoDB Vector Search 문서의 MongoDB Vector Search 인덱스 필드 참조 섹션을 참조하세요.

다음 예시 단일 MongoDB Vector Search 인덱스 생성하는 방법을 보여줍니다.

// Define the index model with an index name and a definition document
auto model = mongocxx::search_index_model(
"<vectorSearchIndexName>",
make_document(
kvp("fields",
make_array(make_document(
kvp("type", "vector"),
kvp("path", "<fieldName>"),
kvp("numDimensions", 2048),
kvp("similarity", "dotProduct"),
kvp("quantization", "scalar"))))));
model.type("vectorSearch");
// Creates the vector search index
auto result = siv.create_one(model);
std::cout << "New vector search index name: " << result << std::endl;
New vector search index name: vector_search

벡터 검색 인덱스 정의는 다음과 같습니다.

  • type: 인덱스 의 유형이 vectorSearch입니다.

  • path: 인덱스 plot_embedding_voyage_3_large 필드 에 있습니다.

  • numDimensions: 벡터 임베딩의 차원 수는 2048입니다.

  • similarity: 인덱스 는 dotProduct 유사성을 사용하여 유사성을 측정합니다.

  • quantization: 인덱스 scalar 양자화를 사용합니다.

컬렉션 의 모든 검색 인덱스를 나열하려면 mongocxx::search_index_view 객체 에서 list() 메서드를 호출합니다. 이 메서드는 컬렉션의 MongoDB Vector Search 및 MongoDB Search 인덱스를 반복하는 데 사용할 수 있는 mongocxx::cursor 객체 반환합니다.

다음 예시 지정된 컬렉션 에서 사용 가능한 검색 인덱스 목록을 출력합니다.

auto cursor = siv.list();
for (auto const& doc : siv.list()) {
std::cout << bsoncxx::to_json(doc) << std::endl;
}
{ "id" : ..., "name" : "vector_index", "type" : "vectorSearch", ...,
"latestDefinition" : { "fields" : [ { "type" : "vector", "path" : "plot_embedding_voyage_3_large", "numDimensions" : 2048, ...}

또는 list() 메서드에 인덱스 이름을 전달하여 개별 MongoDB Vector Search 인덱스 나열할 수 있습니다. 이렇게 하면 지정된 인덱스 만 포함된 결과 설정하다 을 가리키는 mongocxx::cursor 객체 반환됩니다.

다음 예시 list() 메서드를 사용하여 이름이 vector_index인 인덱스 를 반환합니다.

for (auto const& doc : siv.list("vector_index")) {
std::cout << bsoncxx::to_json(doc) << std::endl;
}
{ "id" : ..., "name" : "vector_index", "type" : "vectorSearch", ...,
"latestDefinition" : { "fields" : [ { "type" : "vector", "path" : "plot_embedding_voyage_3_large", "numDimensions" : 2048, ...}

MongoDB Vector Search 인덱스 업데이트 하려면 mongocxx::search_index_view 객체 에서 update_one() 메서드를 호출하고 업데이트 하려는 인덱스 의 이름과 인덱스 업데이트 할 정의를 전달합니다.

다음 예시 euclidean dotProduct 유사성 대신 를 사용하고 binary scalar 양자화 대신 를 사용하도록 이전 MongoDB 벡터 검색 인덱스 만들기 예시 의 기존 MongoDB 벡터 검색 인덱스 업데이트 방법을 보여 줍니다.

auto definition = make_document(
kvp("fields",
make_array(make_document(
kvp("type", "vector"), kvp("path", "plot_embedding_voyage_3_large"),
kvp("numDimensions", 2048), kvp("similarity", "euclidean"),
kvp("quantization", "binary")))));
siv.update_one("vector_index", definition.view());

컬렉션 에서 MongoDB Vector Search 인덱스 제거 하려면 mongocxx::search_index_view 객체 에서 drop_one() 메서드를 호출하고 제거 하려는 인덱스 의 이름을 전달합니다.

다음 예시 vector_index(이)라는 이름의 MongoDB Vector Search 인덱스 제거 방법을 보여 줍니다.

siv.drop_one("vector_index");

C++ 운전자 에서 인덱스를 관리 방법을 보여주는 샘플 애플리케이션 은 인덱스 가이드 참조하세요.

MongoDB Vector Search 기능 사용하고 MongoDB Vector Search 인덱스를 정의하는 방법에 대한 자세한 가이드는 다음 MongoDB Vector Search 문서 페이지를 참조하세요.

이 가이드 에서 설명하는 메서드에 대해 학습 보려면 다음 API 설명서를 참조하세요.

돌아가기

MongoDB 검색 인덱스

이 페이지의 내용