개요
이 가이드 에서는 Django MongoDB 백엔드를 사용하여 Atlas Vector Search 쿼리를 수행하는 방법을 학습 수 있습니다. 이 기능 사용하면 문서에서 시맨틱 검색 수행할 수 있습니다. 시맨틱 검색 제공된 검색 또는 구문 텀 의미는 비슷하지만 반드시 동일하지는 않은 정보를 찾는 검색 유형입니다.
샘플 데이터
이 가이드 의 예제에서는 Atlas 샘플 데이터 세트의 sample_mflix.embedded_movies
컬렉션 나타내는 MovieWithEmbeddings
모델을 사용합니다. MovieWithEmbeddings
모델 클래스의 정의는 다음과 같습니다.
from django.db import models from django_mongodb_backend.fields import ArrayField class MovieWithEmbeddings(models.Model): title = models.CharField(max_length=200) runtime = models.IntegerField(default=0) plot_embedding = ArrayField(models.FloatField(), size=1536, null=True, blank=True) class Meta: db_table = "embedded_movies" managed = False def __str__(self): return self.title
MovieWithEmbeddings
모델에는 모델 메타데이터 지정하는 내부 Meta
클래스와 모델의 문자열 표현을 정의하는 __str__()
메서드가 포함되어 있습니다. 이러한 모델 기능에 대해 학습 모델 생성 가이드 의모델 정의를 참조하세요.
코드 예제 실행
Python 대화 셸 사용하여 코드 예제를 실행 수 있습니다. 셸 에 들어가려면 프로젝트의 루트 디렉토리 에서 다음 명령을 실행 .
python manage.py shell
Python 셸 입력한 후 다음 모델 및 모듈을 가져와야 합니다.
from <your application name>.models import MovieWithEmbeddings
Movie
모델과 Python 인터랙티브 셸 사용하여 MongoDB 문서와 상호 작용 장고 애플리케이션 만드는 방법을 학습하려면 시작하기 튜토리얼을 참조하세요.
벡터 검색 수행
중요
쿼리 요구 사항
Atlas Vector Search 쿼리를 수행하려면 먼저 컬렉션 에 Atlas Vector Search 인덱스 만들어야 합니다. 장고 MongoDB 백엔드를 사용하여 Atlas Vector Search 인덱스 만드는 방법을 학습하려면 인덱스 만들기 가이드의 Atlas Vector Search 인덱스 를 참조하세요.
장고 MongoDB 백엔드를 사용하여 시맨틱 의미를 기반으로 데이터를 쿼리 할 수 있습니다. Atlas Vector Search 쿼리 쿼리 벡터 또는 검색 나 구문의 의미를 나타내는 숫자 배열 텀 으로 결과를 반환합니다. MongoDB 이 쿼리 벡터를 문서의 벡터 필드에 저장된 벡터와 비교합니다.
Atlas Vector Search 기준을 지정하려면 django_mongodb_backend.expressions
모듈에서 제공하는 SearchVector
표현식 클래스의 인스턴스 만듭니다. 이 표현식 $vectorSearch
MongoDB 파이프라인 단계에 해당합니다. 다음 인수를 SearchVector()
생성자에 전달합니다.
path
: 쿼리 할 필드 입니다.query_vector
: 검색 기준을 나타내는 숫자 배열 . 쿼리 벡터에 대해 자세히 학습하려면 MongoDB Atlas 문서에서 벡터 를 참조하세요.limit
: 반환할 최대 결과 수입니다.num_candidates
: (선택 사항) 쿼리에 대해 고려할 문서 수입니다.exact
: (선택 사항) 정확한 ENN(최근접 이웃) 검색 수행할지 여부를 나타내는 부울 값입니다. 기본값 은False
입니다. ENN 검색에 대해 자세히 학습하려면 MongoDB Atlas 문서에서 ENN(정확한 최근접 이웃) 검색 을 참조하세요.filter
: (선택 사항) 쿼리 결과에 적용 할 필터하다 .
그런 다음 장고의 API annotate
에서 인스턴스 메서드에 전달하여 Atlas Vector Search 쿼리 실행 SearchVector
QuerySet
. 다음 코드는 Atlas Vector Search 쿼리 수행하기 위한 구문을 보여줍니다.
from django_mongodb_backend.expressions import SearchVector Model.objects.annotate( score=SearchVector( path="<field name>", query_vector=[<vector values>], limit=<number>, num_candidates=<number>, exact=<boolean>, filter=<filter expression> ) )
기본 벡터 검색 예제
이 예시 sample_mflix.embedded_movies
컬렉션 에 대해 Atlas Vector Search 쿼리 실행합니다. 쿼리 다음 조치를 수행합니다.
plot_embedding
벡터 필드 쿼리합니다.결과를
5
문서로 제한합니다.150
후보를 고려하는 근사치 근접 이웃(ANN) 벡터 검색 지정합니다. ANN 검색에 대해 자세히 학습하려면 MongoDB Atlas 문서에서 ANN(근접 이웃) 검색 을 참조하세요.
vector_values = [float(i % 10) * 0.1 for i in range(1536)] MovieWithEmbeddings.objects.annotate( score=SearchVector( path="plot_embedding", query_vector=vector_values, limit=5, num_candidates=150, exact=False, ) )
<QuerySet [<MovieWithEmbeddings: Berserk: The Golden Age Arc I - The Egg of the King>, <MovieWithEmbeddings: Rollerball>, <MovieWithEmbeddings: After Life>, <MovieWithEmbeddings: What Women Want>, <MovieWithEmbeddings: Truth About Demons>]>
팁
앞의 코드 예시 임의의 벡터를 query_vector
인수에 전달합니다. 검색 또는 구문 텀 의미를 나타내는 벡터를 생성하는 방법을 학습하려면 MongoDB Atlas 문서에서 벡터 임베딩을 만드는 방법 을 참조하세요.
벡터 검색 점수 예시
MongoDB Atlas Search 쿼리 에서 반환되는 모든 문서 에 관련성 점수를 할당합니다. 결과 설정하다 에 포함된 문서는 관련성 점수가 가장 높은 순서에서 가장 낮은 순서로 정렬됩니다.
쿼리 결과에 이 점수를 포함하려면 장고의 QuerySet
API 에서 values()
메서드를 사용할 수 있습니다. score
필드 values()
메서드에 인수로 전달합니다.
다음 예시 이전 예시 와 동일한 벡터 검색 쿼리 실행 하고 문서의 벡터 검색 관련성 점수를 출력하는 방법을 보여줍니다.
vector_values = [float(i % 10) * 0.1 for i in range(1536)] MovieWithEmbeddings.objects.annotate( score=SearchVector( path="plot_embedding", query_vector=vector_values, limit=5, num_candidates=150, exact=False, ) ).values("title", "score")
<QuerySet [{'title': 'Berserk: The Golden Age Arc I - The Egg of the King', 'score': 0.47894009947776794}, {'title': 'Rollerball', 'score': 0.45006513595581055}, {'title': 'After Life', 'score': 0.42825883626937866}, {'title': 'What Women Want', 'score': 0.4211753308773041}, {'title': 'Truth About Demons', 'score': 0.4194544851779938}]>
추가 정보
Atlas Vector Search 에 대해 자세히 학습 MongoDB Atlas 설명서에서 다음 리소스를 참조하세요.