Docs Menu
Docs Home
/ / /
C++ 드라이버
/

Atlas search 인덱스

이 페이지의 내용

  • 개요
  • 샘플 데이터
  • Atlas Search 인덱스 만들기
  • 정적 매핑으로 Atlas Search 인덱스 만들기
  • 동적 매핑으로 Atlas Search 인덱스 만들기
  • 여러 Atlas Search 인덱스 만들기
  • Atlas Search 인덱스 나열
  • Atlas Search 인덱스 업데이트
  • Atlas Search 인덱스 제거
  • 추가 정보
  • API 문서

MongoDB Atlas Search 기능을 사용하면 Atlas에서 호스팅되는 컬렉션에서 전체 텍스트 검색을 수행할 수 있습니다. Atlas Search 쿼리를 수행하려면 먼저 인덱싱할 필드와 인덱싱 방법을 지정하는 인덱스를 만들어야 합니다.

Atlas Search 에 학습 보려면 Atlas Search 문서에서 Atlas Search개요를 참조하세요.

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

C++ 애플리케이션 에서 sample_mflix 컬렉션 에 대한 Atlas 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 클래스에는 Atlas Search 인덱스와 상호 작용 수 있는 다음 멤버 함수가 포함되어 있습니다.

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

  • create_many(): 지정된 구성으로 여러 개의 Atlas Search 인덱스를 생성합니다.

  • list():mongocxx::cursor 컬렉션 의 Atlas Search 인덱스 목록을 가리키는 인스턴스 를 반환합니다.

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

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

참고

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

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

다음 섹션에서는 코드 예시를 제공하여 각 Atlas Search 인덱스를 관리하는 방법을 보여줍니다.

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

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

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

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

Atlas Search 인덱스 에서 구성할 수 있는 필드의 전체 목록은 Atlas Atlas Search 가이드 의 Atlas Search 인덱스 구문 검토 가이드를 참조하세요.

다음 섹션에서는 정적 또는 동적 매핑을 사용하는 단일 Atlas Search 인덱스 를 만드는 방법을 보여줍니다.

Atlas Search 인덱스 에서 정적 매핑을 사용하여 인덱스 인덱스 을 구성합니다.

정적 매핑을 사용하는 단일 Atlas Search 인덱스 를 만들려면 먼저 mappings 필드 를 포함하는 definition 문서 를 만듭니다. mappings 필드 에 다음 필드와 값이 포함된 문서 를 지정합니다.

  • dynamic: false 로 설정합니다.

  • fields: 인덱스 인덱스 을 지정하는 문서입니다. 옵션에 mappings.fields 학습 보려면 Atlas Search 문서에서 정적 매핑 예제를 참조하세요.

그런 다음 name 문자열과 definition 문서 를 mongocxx::search_index_model 생성자에 전달하여 mongocxx::search_index_model 을 인스턴스화합니다. 이 mongocxx::search_index_model 인스턴스 를 create_one() 메서드에 전달하여 지정된 Atlas Search 인덱스 를 컬렉션 에 추가합니다.

다음 예시 에서는 정적 매핑을 사용하는 단일 Atlas Search 인덱스 를 만드는 방법을 보여 줍니다.

// Create an index model with your index name and definition containing the fields you want to index
auto name = "myStaticIndex";
auto fields = make_document(kvp("title", make_document(kvp("type", "string"), kvp("analyzer","lucene.standard"))), kvp("year", make_document(kvp("type","number"))));
auto definition = make_document(kvp("mappings", make_document(kvp("dynamic", false), kvp("fields", fields))));
auto model = mongocxx::search_index_model(name, definition.view());
// Create the search index
auto result = siv.create_one(model);
std::cout << "New index name: " << result << std::endl;
New index name: myStaticIndex

중요

필드 이름 시작 부분에 달러($) 기호가 포함된 필드는 인덱싱할 수 없습니다.

정적 매핑을 사용해야 하는 경우에 학습 보려면 Atlas Search 문서의 정적 매핑 섹션을 참조하세요.

Atlas Search 인덱스 에서 동적 매핑을 사용하여 지원되는 유형의 모든 필드를 자동으로 인덱스 합니다. 지원되는 BSON 데이터 유형 목록은 Atlas Search 문서의 데이터 유형 섹션을 참조하세요.

동적 매핑을 사용하는 단일 Atlas Search 인덱스 를 만들려면 먼저 mappings 필드 가 포함된 definition 문서 를 만듭니다. mappings 필드 에서 값이 true 로 설정하다 dynamic 필드 가 포함된 문서 를 지정합니다. 그런 다음 name 문자열과 definition 문서 를 mongocxx::search_index_model 생성자에 전달하여 mongocxx::search_index_model 을 인스턴스화합니다. 이 mongocxx::search_index_model 인스턴스 를 create_one() 메서드에 전달하여 지정된 Atlas Search 인덱스 를 컬렉션 에 추가합니다.

다음 예시 에서는 동적 매핑을 사용하는 단일 Atlas Search 인덱스 를 만드는 방법을 보여 줍니다.

// Create an index model with your index name and definition
auto name = "myDynamicIndex";
auto definition = make_document(kvp("mappings", make_document(kvp("dynamic", true))));
auto model = mongocxx::search_index_model(name, definition.view());
// Create the search index
auto result = siv.create_one(model);
std::cout << "New index name: " << result << std::endl;
New index name: myDynamicIndex

동적 매핑을 사용해야 하는 경우에 학습 보려면 Atlas Search 문서의 동적 매핑 섹션을 참조하세요.

여러 개의 Atlas Search 인덱스를 만들려면 mongocxx::search_index_view 인스턴스 에서 create_many() 메서드를 호출하고 생성하려는 Atlas Search 인덱스를 지정하는 mongocxx::search_index_model 인스턴스의 벡터를 전달합니다.

다음 예시 는 여러 개의 Atlas Search 인덱스를 만드는 방법을 보여줍니다.

// Create a vector to store Search index models
std::vector<mongocxx::search_index_model> models;
// Add an index model with dynamic mappings to the input vector
auto name_1 = "myDynamicIndex";
auto definition_1 = make_document(kvp("mappings", make_document(kvp("dynamic", true))));
auto model_1 = mongocxx::search_index_model(name_1, definition_1.view());
models.push_back(model_1);
// Add an index model with static mappings to the input vector
auto name_2 = "myStaticIndex";
auto fields = make_document(kvp("title", make_document(kvp("type", "string"), kvp("analyzer","lucene.standard"))), kvp("year", make_document(kvp("type","number"))));
auto definition_2 = make_document(kvp("mappings", make_document(kvp("dynamic", false), kvp("fields", fields))));
auto model_2 = mongocxx::search_index_model(name_2, definition_2.view());
models.push_back(model_2);
// Create the search indexes
auto result = siv.create_many(models);
// Print the search index names
std::cout << "New index names:" << std::endl;
for (const std::string& name : result) {
std::cout << name << std::endl;
}
New index names:
myDynamicIndex
myStaticIndex

컬렉션 의 Atlas Search 인덱스를 나열하려면 mongocxx::search_index_view 인스턴스 에서 list() 메서드를 호출합니다. 이 메서드는 컬렉션의 Atlas Search 인덱스를 반복하는 데 사용할 수 있는 mongocxx::cursor 인스턴스 를 반환합니다.

다음 예시 에서는 여러 Atlas Search 인덱스 cursor::iterator 만들기의 인덱스를 가리키는 인스턴스를 반복하여 Atlas Search 인덱스 목록을 인쇄합니다.

auto cursor = siv.list();
for (mongocxx::cursor::iterator it = cursor.begin(); it != cursor.end(); ++it) {
std::cout << bsoncxx::to_json(*it) << std::endl;
}
{ "id" : ..., "name" : "myDynamicIndex", "type" : "search", ...,
"latestDefinition" : { "mappings" : { "dynamic" : true } }, ...}
{ "id" : ..., "name" : "myStaticIndex", "type" : "search", ...,
"latestDefinition" : { "mappings" : { "dynamic" : false, "fields" : { "title" : { "type" : "string", "analyzer" : "lucene.standard" }, "year" : { "type" : "number" } } } }, ...}

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

다음 예시 에서는 list() 메서드를 사용하여 이름이 myDynamicIndex인 인덱스 를 출력합니다.

auto cursor = siv.list("myDynamicIndex");
for (mongocxx::cursor::iterator it = cursor.begin(); it != cursor.end(); ++it) {
std::cout << bsoncxx::to_json(*it) << std::endl;
}
{ "id" : ..., "name" : "myDynamicIndex", "type" : "search", ...,
"latestDefinition" : { "mappings" : { "dynamic" : true } }, ...}

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

다음 예시 에서는 정적 매핑을 사용하여 검색 인덱스 만들기 의 Atlas Search 인덱스 를 업데이트 하여 필드 에서 간단한 분석기 를 사용하는 방법을 보여 title 줍니다.

auto update_fields = make_document(kvp("title", make_document(kvp("type", "string"), kvp("analyzer","lucene.simple"))), kvp("year", make_document(kvp("type","number"))));
auto update_definition = make_document(kvp("mappings", make_document(kvp("dynamic", false), kvp("fields", update_fields))));
siv.update_one("myStaticIndex", update_definition.view());

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

다음 예시 에서는 myDynamicIndex 이라는 Atlas Search 인덱스 를 제거 하는 방법을 보여 줍니다.

siv.drop_one("myDynamicIndex");

인덱스 관리 방법을 보여주는 실행 가능한 예제를 보려면 인덱스를 사용하여 쿼리 최적화를 참조하세요.

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

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

돌아가기

복합 인덱스