Docs Menu
Docs Home
/ /

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

このガイドでは、 MongoDB ベクトル検索機能を使用して、ドキュメントに対して検索を実行する方法を学習できます。 PHPライブラリでは、 集計ビルダを使用してMongoDB ベクトル検索クエリを実行できます。

MongoDB ベクトル検索 の詳細については、「 MongoDB ベクトル検索 の概要 」を参照してください。 PHPライブラリのMongoDB ベクトル検索 の実装は、クエリを実行するために内部的に$vectorSearch 集計演算子を使用します。この演算子の詳細については、Atlas ドキュメントの $vectorSearch参照を参照してください。

注意

MongoDB Search

ドキュメントに対して高度な全文検索を実行するには、 MongoDB Search API を使用できます。この機能について詳しくは、 「 MongoDB Search クエリの実行 」ガイドを参照してください。

MongoDB ベクトル検索クエリを実行する前に、コレクションにMongoDB ベクトル検索インデックスを作成する必要があります。このインデックスタイプの作成の詳細については、 「 MongoDB Search インデックスガイド 」を参照してください。

集計ビルダを使用してMongoDB ベクトル検索クエリを実行するには、次のクラスをアプリケーションにインポートします。

use MongoDB\Builder\Stage;

集計パイプラインに $vectorSearch ステージを作成するには、次のアクションを実行します。

  1. パイプラインステージを保存するための配列を作成します。

  2. MongoDB ベクトル検索ステージを作成するには、Stage::vectorSearch() メソッドを呼び出します。

  3. vectorSearch() メソッドの本体内で、ベクトルクエリの基準を指定します。

次のコードは、基本的なMongoDB ベクトル検索クエリを構築するためのテンプレートを示しています。

$pipeline = [
Stage::vectorSearch(
/* MongoDB Vector Search query specifications
index: '<index name>',
path: '<path to embeddings>', ...*/
),
];

次のパラメータをvectorSearch()メソッドに渡す必要があります。

Parameter
タイプ
説明

index

string

ベクトル検索インデックスの名前

path

array or string

ベクトル埋め込みを保存するフィールド

queryVector

array

クエリのベクトル表現

limit

int

返される結果の数

このセクションでは、 集計ビルダ を使用してMongoDB ベクトル検索クエリを実行する方法を学びます。このセクションの例では、 sample_mflix.embedded_moviesコレクションのサンプルデータを使用します。

注意

クエリベクトルの長さ

デモンストレーションのため、このセクションの例では、 実行可能なアプリケーションで使用するクエリベクトルと比較して、非常に少ない要素を含むサンプルクエリ ベクトルを使用します。完全長クエリベクトル を含む例を表示するには、 MongoDB ベクトル検索クイック スタートを参照し、ページ右上隅の PHPSelect your languageドロップダウンから を選択します。

次のコードは、plot_embeddingベクトルフィールドに対してMongoDB ベクトル検索クエリを実行します。

$pipeline = [
Stage::vectorSearch(
index: 'vector',
path: 'plot_embedding',
queryVector: [-0.0016261312, -0.028070757, -0.011342932],
numCandidates: 150,
limit: 5,
),
Stage::project(
_id: 0,
title: 1,
),
];
$cursor = $collection->aggregate($pipeline);
foreach ($cursor as $doc) {
echo json_encode($doc), PHP_EOL;
}
{"title":"Thrill Seekers"}
{"title":"About Time"}
{"title":"Timecop"}
// Results truncated

次のコードは 、前の例と同じクエリを実行しますが、ドキュメントがクエリベクトルにどの程度一致するかを示す titleフィールドと vectorSearchScore メタフィールドのみを出力します。

$pipeline = [
Stage::vectorSearch(
index: 'vector',
path: 'plot_embedding',
queryVector: [-0.0016261312, -0.028070757, -0.011342932],
numCandidates: 150,
limit: 5,
),
Stage::project(
_id: 0,
title: 1,
score: ['$meta' => 'vectorSearchScore'],
),
];
$cursor = $collection->aggregate($pipeline);
foreach ($cursor as $doc) {
echo json_encode($doc), PHP_EOL;
}
{"title":"Thrill Seekers","score":0.927734375}
{"title":"About Time","score":0.925750732421875}
{"title":"Timecop","score":0.9241180419921875}
// Results truncated

vectorSearch() メソッドを使用して、さまざまなタイプのMongoDB ベクトル検索クエリを実行できます。ご希望のクエリに応じて、次の任意パラメータを vectorSearch() に渡すことができます。

任意のパラメーター
タイプ
説明
デフォルト値

exact

bool

完全最近傍(true)検索または近似近傍(false)検索を実行するかどうかを指定します

false

filter

QueryInterface or array

検索するドキュメントの事前フィルターを指定します

フィルタリングなし

numCandidates

int or null

検索中に使用する最近傍の数を指定します

null

これらのパラメータの詳細については、Atlas ドキュメントの $vectorSearch 演算子参照の「フィールド」セクションを参照してください。

戻る

MongoDB Search

項目一覧