Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Menu Docs
Página inicial do Docs
/ / /
Backend do Django MongoDB
/

Executar uma query no Atlas Vector Search

Neste guia, você pode aprender como usar o Django MongoDB Backend para executar queries do Atlas Vector Search. Esse recurso permite realizar uma pesquisa semântica em seus documentos. Uma pesquisa semântica é um tipo de pesquisa que localiza informações com significado semelhante, mas não necessariamente idênticas, ao termo ou frase de pesquisa fornecida.

Os exemplos nesta aba usam o modelo MovieWithEmbeddings, que representa a collection sample_mflix.embedded_movies dos conjuntos de dados de amostra do Atlas. A classe de modelo MovieWithEmbeddings tem a seguinte definição:

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

O modelo MovieWithEmbeddings inclui uma classe Meta interna, que especifica os metadados do modelo, e um método __str__(), que define a representação de string do modelo. Para saber mais sobre essas funcionalidades de modelo, consulte Definir um modelo no guia Criar modelos.

Você pode usar o shell interativo do Python para executar os exemplos de código. Para entrar na shell, execute o seguinte comando no diretório raiz do seu projeto:

python manage.py shell

Depois de inserir o shell do Python, certifique-se de importar os seguintes modelos e módulos:

from <your application name>.models import MovieWithEmbeddings

Para saber como criar um aplicação Django que use o modelo Movie e o shell interativo Python para interagir com documentos do MongoDB, acesse o tutorial de Introdução.

Importante

Requisitos de query

Antes de executar queries do Atlas Vector Search , você deve criar um índice do Atlas Vector Search em sua collection. Para saber como usar o Django MongoDB Backend para criar um índice do Atlas Vector Search, consulte Índices do Atlas Vector Search no guia Criar índices.

Você pode usar o Django MongoDB Backend para consultar seus dados com base em seu significado semântica. Uma query do Atlas Vector Search retorna resultados com base em um vetor de query ou em uma array de números que representa o significado de seu termo ou frase de pesquisa. O MongoDB compara esse vetor de query com os vetores armazenados nos campos de vetor de seus documentos.

Para especificar seus critérios do Atlas Vector Search , crie uma instância da classe de expressão SearchVector fornecida pelo módulo django_mongodb_backend.expressions. Esta expressão corresponde ao estágio de pipeline MongoDB $vectorSearch. Passe os seguintes argumentos para o construtor SearchVector():

  • path: O campo a ser consultado.

  • query_vector: uma array de números que representa seus critérios de pesquisa. Para saber mais sobre vetores de query, consulte vetores na documentação do MongoDB Atlas.

  • limit: o número máximo de resultados a serem retornados.

  • num_candidates: (Opcional) O número de documentos a considerar para a query.

  • exact: (Opcional) Um valor booleano que indica se deve ser executada uma pesquisa pelo vizinho mais próximo (ENN). O valor padrão é False. Para saber mais sobre pesquisas ENN, consulte Pesquisa ENN (Exact nearest Neighbor) na documentação do MongoDB Atlas.

  • filter: (Opcional) Um filtro para aplicar aos resultados da consulta.

Em seguida, execute sua query do Atlas Vector Search passando sua SearchVector instância para o annotate método da QuerySet API do Django. O seguinte código mostra a sintaxe para executar uma query do 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>
)
)

Este exemplo executa uma query do Atlas Vector Search na collection sample_mflix.embedded_movies. A query executa as seguintes ações:

  • Executa query do campo vetorial plot_embedding.

  • Limita os resultados a 5 documentos.

  • Especifica uma pesquisa vetorial do vizinho mais próximo (ANN) que considera 150 candidatos. Para saber mais sobre pesquisas de ANN, consulte Pesquisa ANN (Approximate nearest Neighbor) na documentação do MongoDB Atlas.

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>]>

Dica

O exemplo de código anterior passa um vetor arbitrário para o argumento query_vector. Para saber como gerar um vetor que representa o significado de um termo ou frase de pesquisa, consulte Como criar incorporações vetoriais na documentação do MongoDB Atlas.

O MongoDB atribui uma pontuação de relevância a cada documento retornado em uma query do Atlas Search . Os documentos incluídos em um conjunto de resultados são ordenados da pontuação de relevância mais alta para a mais baixa.

Para incluir essa pontuação nos resultados da query, você pode usar o método values() da API QuerySet do Django. Passe o campo score como um argumento para o método values().

O exemplo a seguir mostra como executar a mesma query de pesquisa vetorial do exemplo anterior e imprimir as pontuações de relevância da pesquisa vetorial dos documentos:

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}]>

Para saber mais sobre o Atlas Vector Search, consulte os seguintes recursos na documentação do MongoDB Atlas :

Voltar

Atlas Search

Nesta página