AI 에이전트의 경우: 문서 인덱스는 https://www.mongodb.com/ko-kr/docs/llms.txt에서 사용할 수 있으며, 모든 페이지의 마크다운 버전은 어떤 URL 경로에 .md를 추가하여 사용할 수 있습니다.
Docs Menu

MongoDB 벡터 검색 쿼리 실행

이 가이드에서는 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

Atlas 샘플 데이터

sample_mflix 샘플 데이터를 로드하는 방법을 학습하려면 Atlas 문서의 Atlas에 데이터 로드 튜토리얼을 참조하십시오.

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 메서드에 전달하여 쿼리를 사용자 지정할 수 있습니다.

옵션
유형
설명
기본값

index

String or Symbol

사용할 벡터 검색 인덱스의 이름입니다. 모델이 두 개 이상의 벡터 검색 인덱스를 선언하는 경우에만 필요합니다.

모델에서 추론됨

path

String or Symbol

벡터 임베딩이 포함된 필드입니다. 인덱스 정의에서 벡터 필드를 추론할 수 없는 경우에만 필요합니다.

인덱스에서 추론됨

limit

Integer

반환할 문서의 최대 개수.

10

num_candidates

Integer

검색 중 고려할 최근접 이웃의 수입니다.

limit * 10

filter

Hash

검색 전에 문서를 사전 필터링하는 데 사용되는 쿼리.

필터링 없음

pipeline

Array

벡터 검색 후 추가할 집계 단계입니다.

추가 단계 없음

다음 코드는 150 개의 후보를 고려하고 2000년 이후에 출시된 영화만 반환하는 MongoDB 벡터 검색 쿼리를 실행합니다.

movies = Movie.vector_search(
query_vector,
limit: 5,
num_candidates: 150,
filter: { year: { "$gt" => 2000 } }
)

이러한 옵션에 대해 자세히 학습하려면 Atlas 문서에서 $vectorSearch 연산자 참조의 필드 섹션을 참조하세요.

벡터 검색 인덱스를 선언하고 만드는 방법을 알아보려면 인덱스 가이드의 MongoDB 벡터 검색 인덱스 섹션을 참조하세요.

이 가이드에 언급된 개념에 대해 자세히 알아보려면 Atlas 설명서의 다음 페이지를 참조하세요.

이 가이드 에 언급된 메서드에 학습 보려면 다음 API 설명서를 참조하세요.