개요
이 가이드에서는 Mongoid를 사용하여 MongoDB 벡터 검색 쿼리를 실행하는 방법을 학습할 수 있습니다. MongoDB 벡터 검색을 사용하면 벡터 임베딩을 사용하여 문서의 의미론적 의미를 기반으로 쿼리할 수 있습니다.
Mongoid는 vector_search 메서드를 제공하여 $vectorSearch 집계 단계를 빌드하고 실행합니다. $vectorSearch 집계 단계에 대해 자세히 알아보려면 집계 작업 가이드 참조하세요.
참고
배포 호환성
MongoDB 벡터 검색을 사용하려면 MongoDB 8.2 이상이 실행되는 MongoDB Atlas 클러스터 또는 자체 관리형 배포서버에 연결해야 합니다.
MongoDB Vector Search에 대해 자세히 학습하려면 Atlas 설명서에서 MongoDB Vector Search 개요 를 참조하세요.
전제 조건
MongoDB 벡터 검색 쿼리를 실행하려면 먼저 모델에 벡터 필드와 벡터 검색 인덱스를 정의한 다음 컬렉션에 인덱스를 만들어야 합니다. 벡터 검색 인덱스를 선언하고 만드는 방법을 알아보려면 인덱스 가이드의 MongoDB 벡터 검색 인덱스 섹션을 참조하세요.
이 가이드의 예시에서는 sample_mflix 데이터베이스의 embedded_movies 컬렉션에 매핑되는 다음 Movie 모델을 사용합니다. plot_embedding 필드에는 각 영화 줄거리의 벡터 임베딩이 저장됩니다.
class Movie include Mongoid::Document store_in collection: "embedded_movies", database: "sample_mflix" field :title, type: String field :plot, type: String field :year, type: Integer field :plot_embedding, type: Array # Declare a vector search index on the `plot_embedding` field. The `_id` # and `year` filter fields enable instance-level and filtered queries. vector_search_index :plot_embedding_index, fields: [ { type: "vector", path: "plot_embedding", numDimensions: 1536, similarity: "cosine" }, { type: "filter", path: "_id" }, { type: "filter", path: "year" } ] end
벡터 검색 쿼리 실행
MongoDB 벡터 검색 쿼리를 실행하려면 모델에서 vector_search 클래스 메서드를 호출하고 쿼리 벡터를 첫 번째 인수로 전달합니다. 쿼리 벡터는 검색 입력을 나타내는 벡터 임베딩입니다.
다음 코드 예시는 plot_embedding 필드에 대해 MongoDB 벡터 검색 쿼리를 실행하고 일치하는 각 영화의 제목을 인쇄합니다. Movie 모델이 하나의 벡터 검색 인덱스만 선언하므로 Mongoid는 사용할 인덱스와 벡터 필드를 자동으로 선택합니다.
# The query vector must have the same number of dimensions as the # vector search index (1536, in this example). query_vector = [ -0.0016261312, -0.028070757, -0.011342932, ..., -0.009710136 ] movies = Movie.vector_search(query_vector, limit: 5) movies.each do |movie| puts movie.title end
Thrill Seekers About Time The Time Machine Timecop Crusade in Jeans
vector_search 메서드는 Movie 문서 배열을 반환합니다. 기본적으로 가장 유사한 10 문서를 반환합니다. 결과 수를 변경하려면 limit 옵션을 설정하세요. 이전 예시에서는 5 개의 결과를 지정합니다.
벡터 검색 점수
vector_search 이 반환하는 각 문서에는 문서가 쿼리 벡터와 일치하는 정도를 나타내는 vector_search_score 속성이 있습니다. 점수가 높을수록 일치도가 높습니다.
다음 코드는 이전 예시와 동일한 쿼리를 실행하지만 일치하는 각 영화의 제목과 점수를 출력합니다.
movies = Movie.vector_search(query_vector, limit: 5) movies.each do |movie| puts "#{movie.title}: #{movie.vector_search_score}" end
Thrill Seekers: 0.9253387451171875 About Time: 0.9246978759765625 The Time Machine: 0.9229583740234375 Timecop: 0.9228057861328125 Crusade in Jeans: 0.9222259521484375
유사 문서 검색
문서 인스턴스에서 vector_search 메서드를 호출하여 해당 문서와 유사한 문서를 찾을 수도 있습니다. 문서에서 vector_search 을 호출하면 Mongoid는 문서 자체의 저장된 벡터를 쿼리 벡터로 사용하고 문서 자체는 결과에서 제외합니다.
다음 코드는 기존 Movie 문서와 가장 유사한 영화 5개를 찾습니다.
movie = Movie.find_by(title: "About Time") neighbors = movie.vector_search(limit: 5) neighbors.each do |neighbor| puts neighbor.title end
Thrill Seekers The Time Machine Timecop Crusade in Jeans Frequency
벡터 검색 옵션
다음 키워드 인수를 vector_search 메서드에 전달하여 쿼리를 사용자 지정할 수 있습니다.
옵션 | 유형 | 설명 | 기본값 |
|---|---|---|---|
|
| 사용할 벡터 검색 인덱스의 이름입니다. 모델이 두 개 이상의 벡터 검색 인덱스를 선언하는 경우에만 필요합니다. | 모델에서 추론됨 |
|
| 벡터 임베딩이 포함된 필드입니다. 인덱스 정의에서 벡터 필드를 추론할 수 없는 경우에만 필요합니다. | 인덱스에서 추론됨 |
|
| 반환할 문서의 최대 개수. |
|
|
| 검색 중 고려할 최근접 이웃의 수입니다. |
|
|
| 검색 전에 문서를 사전 필터링하는 데 사용되는 쿼리. | 필터링 없음 |
|
| 벡터 검색 후 추가할 집계 단계입니다. | 추가 단계 없음 |
다음 코드는 150 개의 후보를 고려하고 2000년 이후에 출시된 영화만 반환하는 MongoDB 벡터 검색 쿼리를 실행합니다.
movies = Movie.vector_search( query_vector, limit: 5, num_candidates: 150, filter: { year: { "$gt" => 2000 } } )
이러한 옵션에 대해 자세히 학습하려면 Atlas 문서에서 $vectorSearch 연산자 참조의 필드 섹션을 참조하세요.
추가 정보
벡터 검색 인덱스를 선언하고 만드는 방법을 알아보려면 인덱스 가이드의 MongoDB 벡터 검색 인덱스 섹션을 참조하세요.
이 가이드에 언급된 개념에 대해 자세히 알아보려면 Atlas 설명서의 다음 페이지를 참조하세요.
API 문서
이 가이드 에 언급된 메서드에 학습 보려면 다음 API 설명서를 참조하세요.