Atlas search 인덱스
이 페이지의 내용
개요
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
를 인스턴스화하고 db
및 collection
변수에 다음 값을 할당합니다.
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 인덱스 만들기
컬렉션 에 단일 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 인덱스 에서 정적 매핑을 사용하여 인덱스 인덱스 을 구성합니다.
정적 매핑을 사용하는 단일 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 인덱스 만들기
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 인덱스 나열
컬렉션 의 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 인덱스 업데이트
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 인덱스 제거
컬렉션 에서 Atlas Search 인덱스 를 제거 하려면 mongocxx::search_index_view
인스턴스 에서 drop_one()
메서드를 호출하고 제거 하려는 인덱스 의 이름을 전달합니다.
다음 예시 에서는 myDynamicIndex
이라는 Atlas Search 인덱스 를 제거 하는 방법을 보여 줍니다.
siv.drop_one("myDynamicIndex");
추가 정보
인덱스 관리 방법을 보여주는 실행 가능한 예제를 보려면 인덱스를 사용하여 쿼리 최적화를 참조하세요.
Atlas Search 기능 을 사용하고 Atlas Search 인덱스를 정의하는 방법에 대한 자세한 가이드는 다음 Atlas Search 설명서 페이지를 참조하세요.
API 문서
이 가이드 에서 설명하는 메서드에 대해 학습 보려면 다음 API 설명서를 참조하세요.