Overview
このガイドでは、 MongoDB ベクトル検索機能を使用して、ドキュメントに対して検索を実行する方法を学習できます。 PHPライブラリでは、 集計ビルダを使用してMongoDB ベクトル検索クエリを実行できます。
MongoDB ベクトル検索 の詳細については、「 MongoDB ベクトル検索 の概要 」を参照してください。 PHPライブラリのMongoDB ベクトル検索 の実装は、クエリを実行するために内部的に$vectorSearch 集計演算子を使用します。この演算子の詳細については、Atlas ドキュメントの $vectorSearch参照を参照してください。
注意
MongoDB Search
ドキュメントに対して高度な全文検索を実行するには、 MongoDB Search API を使用できます。この機能について詳しくは、 「 MongoDB Search クエリの実行 」ガイドを参照してください。
MongoDB ベクトル検索インデックス
MongoDB ベクトル検索クエリを実行する前に、コレクションにMongoDB ベクトル検索インデックスを作成する必要があります。このインデックスタイプの作成の詳細については、 「 MongoDB Search インデックスガイド 」を参照してください。
ベクトル検索集計ステージ
集計ビルダを使用してMongoDB ベクトル検索クエリを実行するには、次のクラスをアプリケーションにインポートします。
use MongoDB\Builder\Stage;
集計パイプラインに $vectorSearch ステージを作成するには、次のアクションを実行します。
パイプラインステージを保存するための配列を作成します。
MongoDB ベクトル検索ステージを作成するには、
Stage::vectorSearch()メソッドを呼び出します。vectorSearch()メソッドの本体内で、ベクトルクエリの基準を指定します。
次のコードは、基本的なMongoDB ベクトル検索クエリを構築するためのテンプレートを示しています。
$pipeline = [ Stage::vectorSearch( /* MongoDB Vector Search query specifications index: '<index name>', path: '<path to embeddings>', ...*/ ), ];
次のパラメータをvectorSearch()メソッドに渡す必要があります。
Parameter | タイプ | 説明 |
|---|---|---|
|
| ベクトル検索インデックスの名前 |
|
| ベクトル埋め込みを保存するフィールド |
|
| クエリのベクトル表現 |
|
| 返される結果の数 |
ベクトル検索クエリの例
このセクションでは、 集計ビルダ を使用して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() に渡すことができます。
任意のパラメーター | タイプ | 説明 | デフォルト値 |
|---|---|---|---|
|
| 完全最近傍( |
|
|
| 検索するドキュメントの事前フィルターを指定します | フィルタリングなし |
|
| 検索中に使用する最近傍の数を指定します |
|
これらのパラメータの詳細については、Atlas ドキュメントの $vectorSearch 演算子参照の「フィールド」セクションを参照してください。