Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs Menu
Docs Home
/ / /
Diango MongoDBバックエンド
/

Atlas ベクトル検索クエリの実行

このガイドでは、Diango MongoDBバックエンドを使用して Atlas ベクトル検索クエリを実行する方法を説明します。この機能を使用すると、ドキュメントに対してセマンティック検索を実行できます。セマンティック検索とは、指定した検索タームやフレーズと意味が似ているが、必ずしも同一ではない情報を検索するタイプの検索です。

このガイドの例では、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クラスと、モデルの string 表現を定義する __str__() メソッドが含まれています。 これらのモデル機能について詳しくは、「 モデルの作成ガイドでモデルを定義する 」を参照してください。

Pythonインタラクティブシェル を使用してコード例を実行できます。 シェルを入力するには、プロジェクトの ルートディレクトリから次のコマンドを実行します。

python manage.py shell

Python シェルを入力したら、次のモデルとモジュールをインポートしていることを確認します。

from <your application name>.models import MovieWithEmbeddings

Movie モデルとPython対話型シェル を使用してMongoDBドキュメントを操作する Dlangoアプリケーションを作成する方法については、使い始める チュートリアルをご覧ください。

重要

クエリ要件

Atlas ベクトル検索クエリを実行する前に、コレクションに Atlas ベクトル検索インデックスを作成する必要があります。 Diango MongoDBバックエンド を使用して Atlas ベクトル検索インデックスを作成する方法については、 インデックスの作成ガイドの「 Atlas ベクトル検索インデックス 」を参照してください。

Dpango MongoDBバックエンド を使用すると、セマンティック意味に基づいてデータをクエリできます。Atlas ベクトル検索クエリは、ベクトル、または検索タームやフレーズの意味を表す数値の配列に基づいて結果を返します。 MongoDB は、このクエリベクトルをドキュメントのベクトルフィールドに保存されているベクトルと比較します。

Atlas ベクトル検索条件を指定するには、django_mongodb_backend.expressions モジュールが提供する SearchVector式クラスのインスタンスを作成します。 この式は、$vectorSearch MongoDBパイプラインステージに対応します。次の引数を SearchVector() コンストラクターに渡します。

  • path: クエリするフィールド。

  • query_vector: 検索条件を表す数値の配列。クエリ ベクトルの詳細については、 MongoDB Atlasドキュメントの「 ベクトル 」を参照してください。

  • limit: 返される結果の最大数。

  • num_candidates: (任意)クエリで考慮するドキュメントの数。

  • exact: (任意) 完全近傍(enn)検索を実行するかどうかを示すブール値値。デフォルト値は False です。ENN 検索の詳細については、 MongoDB Atlasドキュメントの ENN(完全近傍)検索 を参照してください。

  • filter: (任意)クエリ結果に適用するフィルター。

Then, run your Atlas Vector Search query by passing your SearchVector instance to the annotate method from Django's QuerySet API. The following code shows the syntax for performing an Atlas Vector Search query:

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 ベクトル検索クエリを実行します。 クエリは、次のアクションを実行します。

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

Tip

上記のコード例では、任意のベクトルをquery_vector 引数に渡します。検索タームやフレーズの意味を表すベクトルを生成する方法については、 MongoDB Atlasドキュメントの「 ベクトル埋め込みの作成方法 」を参照してください。

MongoDB は、Atlas Search クエリで返されるすべてのドキュメントに関連性スコアを割り当てます。結果セットに含まれるドキュメントは、関連性スコアの高いものから低いものの順に並べられます。

このスコアをクエリ結果に含めるには、Diango の 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 ベクトル検索の詳細については、 MongoDB Atlasドキュメントの次のリソースを参照してください。

戻る

Atlas Search

項目一覧