Docs Menu
Docs Home
/ /

MongoDB Search 및 MongoDB Vector Search 검색 인덱스

이 가이드에서는 MongoDB Search 및 MongoDB Vector Search 인덱스를 만들고 관리 방법을 학습 수 있습니다. 이러한 인덱스들을 통해 다음 기능을 사용할 수 있습니다.

  • MongoDB Search: 빠르게 전체 텍스트를 검색하다

  • MongoDB 벡터 검색: 벡터 임베딩에 대한 시맨틱(유사성) 검색 수행

MongoDB Search 및 MongoDB Vector Search 검색 인덱스는 인덱스할 필드를 지정하고, 이러한 필드를 인덱싱하는 방법을 지정하며, 기타 선택 사항 구성을 설정합니다.

참고

MongoDB 검색 인덱스 관리 메서드는 비동기적으로 실행됩니다. 드라이버 메서드는 서버에서 원하는 조치 완료되기 전에 결과를 반환할 수 있습니다.

이 가이드는 다음 조치를 수행하여 MongoDB Search 및 MongoDB Vector Search 검색 인덱스를 관리하는 방법에 대해 설명합니다.

  • 검색 인덱스 모델 만들기

  • 검색 인덱스 만들기

  • 다중 검색 인덱스 만들기

  • 검색 인덱스 나열

  • 검색 인덱스 업데이트

  • 검색 인덱스 삭제

참고

샘플 데이터

이 가이드 의 예제에서는 Atlas 샘플 데이터 세트 중 하나인 sample_mflix 데이터베이스 의 embedded_movies 컬렉션 사용합니다. Atlas 샘플 데이터를 가져오는 방법에 대한 지침은 Atlas 설명서에서 샘플 데이터 로드 를 참조하세요.

다음 섹션에서는 MongoDB Search 및 MongoDB Vector Search 인덱스에 대한 인덱스 모델을 만드는 방법을 설명합니다.

MongoDB Search 인덱스 만들려면 인덱스 사양을 설정하는 CreateSearchIndexModel 인스턴스 구성해야 합니다.

CreateSearchIndexModel 클래스에는 다음과 같은 속성이 있습니다.

속성
유형
설명

Definition

BsonDocument

인덱스 정의를 지정합니다. 이 설정을 생략하면 운전자 동적 매핑을 사용하여 MongoDB Search 인덱스 생성합니다.

Name

string

인덱스 이름을 설정합니다. 이 설정을 생략하면 운전자 이름을 default(으)로 설정합니다.

Type

SearchIndexType

인덱스 유형을 설정합니다. 이 설정을 생략하면 운전자 기본값 으로 MongoDB Search 인덱스 생성합니다.

다음 예시 CreateSearchIndexModel 인스턴스 만들어 search_idx이라는 인덱스 에 대한 사양을 제공합니다. 이 코드는 titlereleased 필드의 정적 매핑을 지정합니다.

var def = new BsonDocument {
{ "mappings", new BsonDocument {
{ "dynamic", false },
{ "fields", new BsonDocument {
{ "title", new BsonDocument { {"type", "string" } } },
{ "released", new BsonDocument { { "type", "date" } } } } }
} }
};
var indexModel = new CreateSearchIndexModel(
"search_idx",
SearchIndexType.Search,
def
);

MongoDB Search 필드 매핑에 대해 자세히 학습하려면 Atlas 설명서에서 필드 매핑 정의 를 참조하세요.

MongoDB Vector Search 인덱스 만들려면 인덱스 사양을 설정하는 CreateVectorSearchIndexModel 인스턴스 구성해야 합니다.

CreateVectorSearchIndexModel 클래스는 CreateSearchIndexModel 클래스를 상속하며 다음과 같은 추가 속성이 있습니다.

속성
유형
설명

Field

FieldDefinition<TDocument>

인덱스 할 벡터가 포함된 필드 지정합니다.

Similarity

VectorSimilarity

상위 K-최근접 이웃을 검색 데 사용할 벡터 유사성 함수를 설정합니다.

Dimensions

int

인덱스 타임 및 쿼리 타임에 검색 시행하는 차원의 수를 지정합니다.

FilterFields

IReadOnlyList<FieldDefinition<TDocument>>

검색 이 벡터 쿼리 에서 필터로 사용하는 필드를 지정합니다.

Quantization

VectorQuantization?

검색 벡터에 대한 자동 벡터 양자화 유형을 지정합니다. 이 속성 설정하다 하지 않으면 검색 자동 양자화를 사용하지 않습니다.

HnswMaxEdges

int?

Hierarchical Navigable Small Worlds 그래프 에서 노드 가질 수 있는 최대 가장자리 수를 설정합니다.

HnswNumEdgeCandidates

int?

새 노드 에 연결할 가장 가까운 이웃을 찾기 위해 평가할 최대 노드 수를 설정합니다.

다음 예시 CreateVectorSearchIndexModel 인스턴스 만들어 vs_idx이라는 인덱스 에 대한 사양을 제공합니다. 이 코드는 임베딩 경로를 MongoDB 의 plot_embedding 필드 에 해당하는 클래스 속성 인 PlotEmbedding로 지정합니다. 또한 1536 차원을 인덱스화하고 Euclidean 벡터 유사성 함수를 사용합니다.

var model = new CreateVectorSearchIndexModel<Movie> (
model => model.PlotEmbedding,
"vs_idx",
VectorSimilarity.Euclidean,
1536);

MongoDB Vector Search 인덱스 정의에 대해 자세히 학습하려면 Atlas 문서에서 벡터 검색을 위한 필드를 인덱싱하는 방법 을 참조하세요.

CreateAutoEmbeddingVectorSearchIndexModel 인덱스 모델을 사용하여 텍스트 필드에 대한 벡터 임베딩을 자동으로 생성하는 MongoDB Vector Search 인덱스 만들 수 있습니다.

CreateAutoEmbeddingVectorSearchIndexModel 에는 CreateVectorSearchIndexModelBase<TDocument>에서 상속된 속성 외에도 다음과 같은 속성이 있습니다.

속성
유형
설명

AutoEmbeddingModelName

string

벡터 임베딩을 생성하는 데 사용할 임베딩 모델의 이름을 지정합니다. 지원되는 모델 목록은 VoyageAI 문서의 텍스트 임베딩 을 참조하세요.

Modality

VectorEmbeddingModality

포함할 데이터 유형을 지정합니다. 현재 지원되는 유일한 모달리티는 VectorEmbeddingModality.Text입니다.

다음 예시 auto_embedded_index이라는 인덱스 에 대한 사양을 제공하는 CreateAutoEmbeddingVectorSearchIndexModel 인스턴스 만듭니다. 이 인덱스 "voyage-4" 임베딩 모델을 사용하여 plot 필드 에 대한 벡터 임베딩을 자동으로 생성하며, runtimeyear 필드에 대한 선택적 필터도 포함합니다.

var model = new CreateAutoEmbeddingVectorSearchIndexModel<EmbeddedMovie>(
m => m.Plot,
"auto_embedding_index",
"voyage-4",
m => m.Runtime, m => m.Year // Optional filter fields
);

IMongoCollection 인스턴스 에서 SearchIndexes.CreateOne() 메서드를 호출하여 컬렉션 에 MongoDB Search 또는 MongoDB Vector Search 인덱스 만들 수 있습니다. 이 메서드는 CreateSearchIndexModel 또는 CreateVectorSearchIndexModel 인스턴스 에 지정된 인덱스 모델을 매개 변수로 허용합니다.

다음 예시 embedded_movies 컬렉션 에 MongoDB Search 인덱스 생성합니다. 이 코드는 인덱스 이름을 설정하고 동적 매핑을 활성화하는 CreateSearchIndexModel 를 생성합니다. 그런 다음 코드는 CreateSearchIndexModel 인스턴스 SearchIndexes.CreateOne() 메서드에 전달하여 MongoDB Search 인덱스 생성합니다.

var indexModel = new CreateSearchIndexModel(
"example_index",
SearchIndexType.Search,
new BsonDocument {
{ "mappings", new BsonDocument {
{ "dynamic", true },
} }
}
);
var result = movieCollection.SearchIndexes.CreateOne(indexModel);
Console.WriteLine("Created MongoDB Search index:\n{0}", result);
Created MongoDB Search index:
"example_index"

IMongoCollection 인스턴스 에서 SearchIndexes.CreateMany() 메서드를 호출하여 여러 개의 MongoDB Search 및 MongoDB Vector Search 인덱스를 만들 수 있습니다. 이 메서드는 CreateSearchIndexModel 또는 CreateVectorSearchIndexModel 인스턴스의 IEnumerable 를 매개 변수로 허용합니다.

이 예에서는 다음 조치를 수행합니다.

  1. as_idx이라는 이름의 MongoDB Search 인덱스 지정하는 CreateSearchIndexModel 인스턴스 생성합니다.

  2. vs_idx이라는 이름의 MongoDB Vector Search 인덱스 지정하는 CreateVectorSearchIndexModel 인스턴스 생성합니다.

  3. CreateSearchIndexModelCreateVectorSearchIndexModel 인스턴스의 ListSearchIndexes.CreateMany() 메서드에 전달합니다.

  4. embedded_movies 컬렉션에 MongoDB Search 및 MongoDB Vector Search 검색 인덱스를 생성합니다.

var searchModel = new CreateSearchIndexModel(
"as_idx",
SearchIndexType.Search,
new BsonDocument {
{ "mappings", new BsonDocument {
{ "dynamic", true },
} }
}
);
var vectorModel = new CreateVectorSearchIndexModel<Movie>(
m => m.PlotEmbedding,
"vs_idx",
VectorSimilarity.Euclidean,
1536);
var models = new List<CreateSearchIndexModel> { searchModel, vectorModel };
var indexes = movieCollection.SearchIndexes.CreateMany(models);
Console.WriteLine("Created Search indexes:\n{0} {1}", indexes.ToArray());
Created Search indexes:
as_idx vs_idx

컬렉션에서 SearchIndexes.List() 메서드를 호출하여 컬렉션의 기존 MongoDB 검색 인덱스 및 MongoDB 벡터 검색 인덱스에 대한 정보에 액세스할 수 있습니다.

다음 예시 여러 검색 인덱스 생성 섹션에서 생성된 MongoDB Search 및 MongoDB Vector Search 인덱스에 대한 정보에 액세스합니다. 이 코드는 SearchIndexes.List() 메서드를 호출하고 컬렉션에 MongoDB 검색 및 MongoDB 벡터 검색 검색 인덱스 목록을 인쇄합니다.

var indexesList = movieCollection.SearchIndexes.List().ToList();
foreach (var i in indexesList)
{
Console.WriteLine(i);
}
{ "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": [...] }

IMongoCollection 인스턴스 에서 SearchIndexes.Update() 메서드를 호출하여 MongoDB Search 또는 MongoDB Vector Search 인덱스 업데이트 할 수 있습니다. 이 메서드는 다음 매개변수를 허용합니다.

  • 업데이트할 인덱스의 이름

  • 수정된 인덱스 정의 문서

다음 예는 이 페이지의 다중 검색 인덱스 생성 섹션에서 생성된 vs_index라는 Vector Search 인덱스를 업데이트합니다. 코드는 "dotProduct"를 벡터 유사성 함수로 사용하도록 인덱스에 지시하는 새로운 인덱스 정의 문서를 생성합니다. 그런 다음 SearchIndexes.Update() 메서드를 호출하여 인덱스를 업데이트합니다.

var updatedDef = new BsonDocument
{
{ "fields", new BsonArray
{
new BsonDocument
{
{ "type", "vector" },
{ "path", "plot_embedding" },
{ "numDimensions", 1536 },
{ "similarity", "dotProduct" }
}
}
}
};
movieCollection.SearchIndexes.Update("vs_index", updatedDef);

IMongoCollection 인스턴스 에서 SearchIndexes.DropOne() 메서드를 호출하여 MongoDB Search 또는 MongoDB Vector Search 인덱스 삭제 수 있습니다. 이 메서드는 삭제 인덱스 의 이름을 매개 변수로 받습니다.

다음 예시 이 페이지의 검색 인덱스 만들기 섹션에서 생성된 example_index 이라는 이름의 MongoDB Search 인덱스 삭제합니다. 이 코드는 인덱스 이름을 SearchIndexes.DropOne() 메서드에 전달하여 인덱스 삭제 .

movieCollection.SearchIndexes.DropOne("example_index");

.NET/ C# 드라이버 사용하여 만들 수 있는 다른 인덱스에 대해 학습하려면 인덱스 만들기 및 관리 가이드를 참조하세요.

MongoDB Search에 대해 자세히 학습 다음 Atlas 설명서를 참조하세요.

MongoDB Vector Search에 대해 자세히 학습 다음 Atlas 설명서를 참조하세요.

이 가이드에서 사용되는 메서드 또는 유형에 대해 자세히 알아보려면 다음 API 문서를 참조하세요.

돌아가기

Indexes

이 페이지의 내용