Atlas Search 및 Vector Search 인덱스
이 페이지의 내용
개요
이 가이드 에서는 Atlas Search 및 Vector Search 인덱스를 만들고 관리 방법을 학습 수 있습니다. 이러한 인덱스를 통해 다음 기능을 사용할 수 있습니다.
Atlas Search: 빠른 전체 텍스트 검색 수행
Atlas Vector Search: 벡터 임베딩에 대한 시맨틱(유사성) 검색 수행
Atlas Search 및 Vector Search 인덱스는 인덱스 할 필드를 지정하고, 이러한 필드를 인덱싱하는 방법을 지정하고, 기타 선택적 구성을 설정하다 .
이 가이드 다음 조치를 수행하여 Atlas Search 및 Vector Search 인덱스를 관리 방법에 대해 설명합니다.
참고
샘플 데이터
이 가이드 의 예제에서는 Atlas 샘플 데이터 세트 중 하나인 sample_mflix
데이터베이스 의 embedded_movies
컬렉션 사용합니다. Atlas 샘플 데이터를 가져오는 방법에 대한 지침은 Atlas 설명서에서 샘플 데이터 로드 를 참조하세요.
검색 인덱스 모델 만들기
Atlas Search 인덱스를 만들려면 먼저 인덱스 사양을 설정하는 SearchIndexModel
인스턴스를 빌드해야 합니다. SearchIndexModel
인스턴스 빌드를 시작하려면 SearchIndexModel::builder()
메서드를 호출합니다.
참고
모델 인스턴스화
Rust 운전자 는 SearchIndexModel
을(를) 포함한 일부 구조체 유형 생성을 위한 빌더 디자인 패턴 을 구현합니다. builder()
메서드를 사용하여 옵션 빌더 메서드를 연결하여 각 유형의 인스턴스 를 구성할 수 있습니다.
Rust 드라이버는 다음과 같은 SearchIndexModel
빌더 메서드를 제공합니다:
빌더 메서드 | Parameter Type | 설명 |
---|---|---|
|
| 인덱스 정의를 지정합니다. 이 설정을 생략하면 운전자 동적 매핑을 사용하여 Atlas Search 인덱스 생성합니다. |
|
| 인덱스 이름을 설정합니다. 이 설정을 생략하면 운전자 이름을 |
|
| 인덱스 유형을 설정합니다. 이 설정을 생략하면 운전자 기본값 으로 Atlas Search 인덱스 생성합니다. |
Atlas Search 필드 매핑에 대해 자세히 알아보려면 Atlas 설명서에서 필드 매핑 정의 를 참조하세요.
Atlas Vector Search 인덱스 정의에 대해 자세히 학습 Atlas 설명서에서 벡터 검색을 위한 필드를 인덱싱하는 방법을 참조하세요.
예제 모델
다음 예시 SearchIndexModel
인스턴스 만들어 search_idx
이라는 인덱스 에 대한 사양을 제공합니다. 이 코드는 title
및 released
필드의 정적 매핑을 지정합니다.
let def = doc! { "mappings": doc! { "dynamic": false, "fields": { "title": {"type": "string"}, "released": {"type": "date"} } }}; let idx_model = SearchIndexModel::builder() .definition(def) .name("search_idx".to_string()) .index_type(SearchIndexType::Search) .build();
다음 예시 SearchIndexModel
인스턴스 만들어 vs_idx
이라는 인덱스 에 대한 사양을 제공합니다. 이 코드는 임베딩 경로를 plot_embedding
로 지정하고, 1536
차원을 인덱싱하며, "euclidean"
벡터 유사성 함수를 사용합니다.
let def = doc! { "fields": [{ "type": "vector", "path": "plot_embedding", "numDimensions": 1536, "similarity": "euclidean", }] }; let idx_model = SearchIndexModel::builder() .definition(def) .name("vs_idx".to_string()) .index_type(SearchIndexType::VectorSearch) .build();
검색 인덱스 만들기
Collection
인스턴스 에서 create_search_index()
메서드를 호출하여 컬렉션 에 Atlas Search 또는 Vector Search 인덱스 만들 수 있습니다. 이 메서드는 SearchIndexModel
인스턴스 에 지정된 인덱스 모델을 매개 변수로 허용합니다.
예시
다음 예제에서는 embedded_movies
collection에 Atlas Search를 생성합니다. 이 코드는 인덱스 이름을 설정하고 동적 매핑을 활성화하는 SearchIndexModel
를 생성합니다. 그런 다음 이 코드는 SearchIndexModel
인스턴스를 create_search_index()
메서드에 전달하여 Atlas Search 인덱스를 생성합니다.
let idx_model = SearchIndexModel::builder() .definition(doc! { "mappings": doc! {"dynamic": true} }) .name("example_index".to_string()) .build(); let result = my_coll.create_search_index(idx_model).await?; println!("Created Atlas Search index:\n{}", result);
Created Atlas Search index: "example_index"
다중 검색 인덱스 만들기
Collection
인스턴스 에서 create_search_indexes()
메서드를 호출하여 여러 개의 Atlas Search 및 Vector Search 인덱스를 만들 수 있습니다. 이 메서드는 SearchIndexModel
인스턴스로 구성된 벡터를 매개 변수로 허용합니다.
예시
이 예에서는 다음 조치를 수행합니다.
as_idx
이라는 Atlas Search 인덱스 지정하는SearchIndexModel
인스턴스 를 만듭니다.vs_idx
이라는 Atlas Vector Search 인덱스 지정하는SearchIndexModel
인스턴스 를 만듭니다.두
SearchIndexModel
인스턴스의vec
을create_search_indexes()
메서드에 전달합니다.embedded_movies
컬렉션 에 Atlas Search 및 Vector Search 인덱스를 생성합니다.
let as_idx = SearchIndexModel::builder() .definition(doc! { "mappings": doc! {"dynamic": true} }) .name("as_idx".to_string()) .build(); let vs_idx = SearchIndexModel::builder() .definition(doc! { "fields": [{ "type": "vector", "path": "plot_embedding", "numDimensions": 1536, "similarity": "euclidean", }] }) .name("vs_idx".to_string()) .index_type(SearchIndexType::VectorSearch) .build(); let models = vec![as_idx, vs_idx]; let result = my_coll.create_search_indexes(models).await?; println!("Created indexes:\n{:?}", result);
Created Atlas Search indexes: ["as_idx", "vs_idx"]
검색 인덱스 나열
컬렉션 에서 list_search_indexes()
메서드를 호출하여 컬렉션의 기존 Atlas Search 및 Vector Search 인덱스에 대한 정보 액세스 할 수 있습니다.
예시
다음 예시 이 페이지의 여러 검색 인덱스 생성 섹션에서 생성된 Atlas Search 및 Vector Search 인덱스에 대한 정보에 액세스합니다. 이 코드는 메서드를 list_search_indexes()
호출하고 컬렉션 에 Atlas Search 및 Vector Search 인덱스 목록을 인쇄합니다.
let mut cursor = my_coll.list_search_indexes().await?; while let Some(index) = cursor.try_next().await? { println!("{}\n", index); }
{ "id": "...", "name": "as_idx", "status": "READY", "queryable": true, "latestDefinitionVersion": {...}, "latestDefinition": { "mappings": { "dynamic": true } }, "statusDetail": [...] } { "id": "...", "name": "vs_idx", "type": "vectorSearch", "status": "READY", "queryable": true, ..., "latestDefinition": { "fields": [{ "type": "vector", "path": "plot_embedding", "numDimensions": 1536, "similarity": "euclidean" }] }, "statusDetail": [...] }
팁
커서 반복에 대해 자세히 알아보려면 커서 를 사용하여 데이터 액세스 가이드를 참조하세요.
검색 인덱스 업데이트
Collection
인스턴스 에서 update_search_index()
메서드를 호출하여 Atlas Search 또는 Vector Search 인덱스 업데이트 할 수 있습니다. 이 메서드는 다음 매개변수를 허용합니다.
업데이트할 인덱스의 이름
수정된 인덱스 정의 문서
예시
다음 예시 이 페이지의 다중 vs_index
검색 인덱스 생성 섹션에서 생성된 이라는 이름의 벡터 검색 인덱스 업데이트합니다. 이 코드는 "dotProduct"
인덱스 벡터 유사성 함수로 를 사용하도록 지시하는 새 인덱스 정의 문서 만듭니다. 그런 다음 메서드를 호출하여 update_search_index()
인덱스 업데이트 .
let name = "vs_index"; let updated_def = doc! { "fields": [{ "type": "vector", "path": "plot_embedding", "numDimensions": 1536, "similarity": "dotProduct", }] }; my_coll.update_search_index(name, updated_def).await?;
검색 인덱스 삭제
Collection
인스턴스 에서 delete_search_index()
메서드를 호출하여 Atlas Search 또는 Vector Search 인덱스 삭제 수 있습니다. 이 메서드는 삭제 인덱스 의 이름을 매개 변수로 받습니다.
예시
다음 예에서는 이 페이지 의 Atlas Search 인덱스 만들기 섹션에서 생성된 Atlas Search (이)라는 이름의 인덱스를 삭제합니다.example_index
이 코드는 인덱스 이름을 delete_search_index()
메서드에 전달하여 인덱스를 삭제합니다.
let name = "example_index"; my_coll.drop_search_index(name).await?;
추가 정보
Rust 드라이버를 사용하여 생성할 수 있는 다른 인덱스에 대해 알아보려면 인덱스 가이드를 참조하세요.
Atlas Search에 대해 자세히 알아보려면 다음 Atlas 설명서를 참조하세요.
Atlas Vector Search 에 대해 자세히 학습 다음 Atlas 설명서를 참조하세요.
API 문서
이 가이드에서 사용되는 메서드 또는 유형에 대해 자세히 알아보려면 다음 API 문서를 참조하세요.