Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs Menu
Docs Home
/ / /
장고 MongoDB 백엔드
/

Atlas Vector Search 쿼리 실행

이 가이드 에서는 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 설명서에서 다음 리소스를 참조하세요.

돌아가기

Atlas Search

이 페이지의 내용