개요
MongoDB Vector Search를 EF Core Provider와 함께 사용하여 Atlas 에 저장된 데이터에 대해 시맨틱 검색 수행할 수 있습니다. 벡터 검색 키워드 일치가 아닌 의미론적 의미를 기반으로 데이터를 쿼리하므로 더 관련성이 높은 결과를 조회 할 수 있습니다. MongoDB Vector Search를 사용하여 시맨틱 검색, 하이브리드 검색 , RAG(Retrieval-Augmented 생성) 등의 사용 사례를 지원 수 있습니다.
MongoDB Vector Search에 대해 자세히 학습하려면 Atlas 설명서에서 MongoDB Vector Search 개요 를 참조하세요.
샘플 데이터
이 가이드 의 예제에서는 sample_mflix 데이터베이스 의 embedded_movies 컬렉션 사용합니다. 이 컬렉션 의 문서는 다음 Movie 클래스를 모델로 사용합니다.
public class Movie { public ObjectId Id { get; set; } public string Title { get; set; } = null!; public string Plot { get; set; } = null!; public float[] PlotEmbedding { get; set; } = null!; }
embedded_movies 컬렉션 Atlas 에서 제공하는 샘플 데이터 세트의 일부입니다. 클러스터 설정하다 하고 이 샘플 데이터를 로드하려면 빠른 시작 가이드 참조하세요.
모델 정의
EF Core Provider와 함께 MongoDB Vector Search를 사용하려면 엔터티 클래스에서 벡터 필드 정의하세요. IsVectorIndex() fluent API 메서드를 사용하여 해당 필드 에 벡터 인덱스 구성합니다.
다음 예시 PlotEmbedding 이라는 벡터 필드 있는 Movie 엔터티를 정의하고 해당 필드 에 벡터 인덱스 구성합니다.
public class MoviesDbContext : DbContext { public DbSet<Movie> Movies { get; init; } = null!; public MoviesDbContext(DbContextOptions options) : base(options) { } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Movie>(entity => { entity.ToCollection("embedded_movies"); entity.Property(m => m.Title).HasElementName("title"); entity.Property(m => m.Plot).HasElementName("plot"); entity.Property(m => m.PlotEmbedding).HasElementName("plot_embedding") .HasBinaryVectorDataType(BinaryVectorDataType.Float32); entity.HasIndex(m => m.PlotEmbedding, "vector_index") .IsVectorIndex(VectorSimilarity.Cosine, 1536); }); } }
참고
인덱스를 생성한 후에는 EF Core Provider를 사용하여 인덱스를 변경하거나 삭제 수 없습니다. 인덱스 변경하거나 삭제 하려면 .NET/ C# 드라이버 사용합니다. 자세한 학습 은 .NET/ C# 드라이버 문서에서 MongoDB 검색 및 MongoDB 벡터 검색 인덱스 가이드 를 참조하세요.
지원되는 벡터 임베딩 유형
EF Core Provider는 다음 유형의 벡터 임베딩을 지원합니다.
배열 표현
EF Core Provider는 다음 배열 유형을 벡터 임베딩으로 지원합니다.
float[]double[]Memory<float>개인정보 정책에ReadOnlyMemory<float>Memory<double>개인정보 정책에ReadOnlyMemory<double>
바이너리 표현
EF Core Provider는 배열 유형에 비해 저장 줄이고 쿼리 성능을 개선하는 다음과 같은 이진 벡터 유형을 지원합니다.
BinaryVectorFloat32— 완전 정밀도 32비트 부동 소수점BinaryVectorInt8— 8비트 양자화된 정수BinaryVectorPackedBit— 1비트 압축 이진 값
.NET/ C# 드라이버 의 MongoDB.Driver 네임스페이스 에는 이진 벡터 인덱스를 구성하는 데 사용되는 VectorQuantization 및 VectorSimilarity 열거형이 포함되어 있습니다.
벡터 검색 쿼리 예시
VectorSearch() 메서드를 사용하여 벡터 검색 쿼리 실행 수 있습니다. 다음 예시 embedded_movies 컬렉션 에 의미적으로 '시간 여행 모험'과 유사한 PlotEmbedding 필드 값을 가진 영화를 쿼리한 다음, 일치하는 문서를 최대 10 개 반환합니다.
// Replace queryVector with a 1536-dimension embedding vector from your model float[] queryVector = new float[] { 0.1f, -0.2f, 0.3f, ... }; var results = context.Movies .VectorSearch(m => m.PlotEmbedding, queryVector, limit: 10) .ToList();
추가 정보
MongoDB Vector Search에 대해 자세히 학습 MongoDB Vector Search 문서를 참조하세요.
API 설명서는 다음 리소스를 참조하세요.