Overview
このガイドでは、MongoDB ベクトル検索機能を使用して、ドキュメントに対して検索する方法を学べます。PHPライブラリでは、集計ビルダを使用してMongoDBベクトル検索クエリを実行できます。
MongoDB ベクトル検索の詳細については、MongoDB ベクトル検索概要を参照してください。PHPライブラリのMongoDBベクトル検索の実装は、クエリを実行するために内部的に $vectorSearch 集計演算子を使用します。この演算子の詳細については、Atlas ドキュメントの $vectorSearch 参照を参照してください。
注意
MongoDB Search
ドキュメントに対して高度な全文検索を実行するには、 MongoDB Search API を使用できます。この機能について詳しくは、MongoDB 検索クエリを実行するガイドを参照してください。
MongoDB ベクトル検索インデックス
MongoDB ベクトル検索の検索クエリを実行する前に、コレクションにMongoDB ベクトル検索インデックスを作成する必要があります。このインデックスタイプの作成の詳細については、MongoDB 検索インデックス ガイドを参照してください。
ベクトル検索集計ステージ
集計ビルダを使用してMongoDB検索クエリを実行するには、次のクラスをアプリケーションにインポートします。
use MongoDB\Builder\Pipeline; use MongoDB\Builder\Stage;
集計パイプラインに $vectorSearch ステージを作成するには、次のアクションを実行します。
パイプラインステージを保存するには、
Pipelineインスタンスを作成します。MongoDB ベクトル検索ステージを作成するには、
Stage::vectorSearch()メソッドを呼び出します。vectorSearch()メソッドの本体内で、ベクトルクエリの基準を指定します。
次のコードは、基本的なMongoDB ベクトル検索検索クエリを構築するためのテンプレートを示しています。
$pipeline = new Pipeline( Stage::vectorSearch( /* MongoDB Vector Search query specifications index: '<index name>', path: '<path to embeddings>', ...*/ ), );
次のパラメータをvectorSearch()メソッドに渡す必要があります。
Parameter | タイプ | 説明 |
|---|---|---|
|
| ベクトル検索インデックスの名前 |
|
| ベクトル埋め込みを保存するフィールド |
|
| クエリのベクトル表現 |
|
| 返される結果の数 |
ベクトル検索クエリの例
このセクションでは、集計ビルダを使用してMongoDBベクトル検索検索クエリを実行する方法を学びます。このセクションの例では、 sample_mflix.embedded_moviesコレクションのサンプルデータを使用します。
注意
クエリベクトルの長さ
デモンストレーションのため、このセクションの例では、 実行可能なアプリケーションで使用するクエリベクトルと比較して、非常に少ない要素を含むサンプルクエリ ベクトルを使用します。完全長クエリベクトルを含む例を表示するには、 MongoDB ベクトル検索クイック スタート を参照し、ページ右上隅の Select your language ドロップダウンから PHP を選択します。
基本的なベクトル検索クエリ
次のコードは、plot_embeddingベクトルフィールドに対してMongoDBベクトル検索クエリを実行します。
$pipeline = new 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 = new 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 演算子参照の「フィールド」セクションを参照してください。