Overview
このガイドでは、 MongoDB Search 機能を使用して、ドキュメントに対して検索を実行する方法を学習できます。 PHPライブラリでは、 集計ビルダを使用してMongoDB Search クエリを実行できます。
MongoDB Search の詳細については、「 MongoDB Search の概要 」を参照してください。 PHPライブラリのMongoDB Search の実装は、クエリを実行するために内部的に$search 集計演算子を使用します。この演算子の詳細については、Atlas ドキュメントの $search参照を参照してください。
注意
MongoDB ベクトル検索
MongoDBでベクトル埋め込みを検索するには、 MongoDB ベクトル検索 API を使用できます。この機能について詳しくは、「 MongoDB ベクトル検索クエリの実行 」ガイドを参照してください。
MongoDB Search インデックス
MongoDB Search クエリを実行する前に、コレクションにMongoDB Searchインデックスを作成する必要があります。このインデックスタイプの作成の詳細については、 「 MongoDB Search インデックスガイド 」を参照してください。
検索集計ステージ
集計ビルダを使用してMongoDB Search クエリを実行するには、次のクラスをアプリケーションにインポートします。
use MongoDB\Builder\Pipeline; use MongoDB\Builder\Search; use MongoDB\Builder\Stage;
集計パイプラインに $search ステージを作成するには、次のアクションを実行します。
パイプラインステージを保存するには、
Pipelineインスタンスを作成します。MongoDB Search ステージを作成するには、
Stage::search()メソッドを呼び出します。search()メソッドの本体内で、Searchビルダ クラスのメソッドを使用して、検索クエリの条件を作成します。
次のコードは、基本的なMongoDB Search クエリを作成するためのテンプレートを示しています。
$pipeline = new Pipeline( Stage::search( /* MongoDB Search query specifications Search::compound(...) */ ), );
MongoDB Search クエリの例
このセクションでは、 集計ビルダ を使用してさまざまなタイプのMongoDB Search クエリを実行する方法を学びます。このセクションの例では、 sample_restaurants.restaurantsコレクションのサンプルデータを使用します。
フィルター付きの複合クエリ
2 つ以上の演算子を 1 つのクエリに結合するには、Search::compound() メソッドを使用します。このメソッドは、must や filter などの句に対して名前付き引数を受け取ります。それぞれの句で、Search::text() メソッドを使用して、全文検索を実行する際に検索する文字列を指定します。
この例では、次の仕様を持つMongoDB Search クエリを実行します。
nameフィールドで文字列"kitchen"を検索するためのmust句を含みますcuisineフィールドに"american"が含まれているドキュメントを高くランク付けするためにshould句を含めます。borough値が結果で"Queens"となるドキュメントのみを含めるためにfilterフィールドを含めます
$pipeline = new Pipeline( Stage::search( Search::compound( must: [ Search::text( query: 'kitchen', path: 'name', ), ], should: [ Search::text( query: 'american', path: 'cuisine', ), ], filter: [ Search::text( query: 'Queens', path: 'borough', ), ], ), ), Stage::project( borough: 1, cuisine: 1, name: 1, ), Stage::limit(3), ); $cursor = $collection->aggregate($pipeline); foreach ($cursor as $doc) { echo json_encode($doc), PHP_EOL; }
{"_id":...,"borough":"Queens","cuisine":"American","name":"Kitchen Door"} {"_id":...,"borough":"Queens","cuisine":"American","name":"Cc Kitchen"} {"_id":...,"borough":"Queens","cuisine":"American","name":"Suite Kitchen"} // Results truncated
オートコンプリートクエリ
PHP ライブラリは、コレクション内のドキュメントでオートコンプリート検索を実行するための Search::autocomplete() メソッドを提供します。
このタイプのMongoDB Search クエリの詳細については、Atlas ドキュメントの オートコンプリート参照を参照してください。
注意
次のコードは、nameフィールドで文字列 "Lucy" のMongoDB Search オートコンプリート クエリを実行します。
$pipeline = new Pipeline( Stage::search( Search::autocomplete( query: 'Lucy', path: 'name', ), ), Stage::limit(3), Stage::project(_id: 0, name: 1), ); $cursor = $collection->aggregate($pipeline); foreach ($cursor as $doc) { echo json_encode($doc), PHP_EOL; }
{"name":"Juicy Lucy"} {"name":"Lucy'S Vietnamese Kitchen"} {"name":"Lucy'S Cantina Royale"} // Results Truncated
クエリをカスタマイズするために、次の任意のパラメーターを autocomplete() メソッドに渡すこともできます。
任意のパラメーター | 説明 | デフォルト値 |
|---|---|---|
| ファジー検索とファジー検索オプションを有効にします |
|
| トークンを検索する順序を指定します |
|
これらのパラメーターの詳細については、Atlas ドキュメントの autocomplete 演算子リファレンスの「オプション」セクションを参照してください。
検索オプション
search() メソッドを使用して、さまざまなタイプのMongoDB Search クエリを実行できます。ご希望のクエリに応じて、次の任意パラメータを search() に渡すことができます。
任意のパラメーター | タイプ | 説明 |
|---|---|---|
|
| 使用するMongoDB Searchインデックスの名前を指定します |
|
| 元のコンテキストで検索タームを表示するためのハイライトオプションを指定します |
|
| 専用の検索ノード上でセグメント間の検索クエリを並列化します |
|
| 結果の数を取得するためのカウント オプションを指定します。 |
|
| その点の直後から始まるドキュメントを返すための参照点を指定します。 |
|
| その点の直前から始まるドキュメントを返すための参照点を指定します。 |
|
| 結果のスコアの詳細な内訳を検索するかどうかを指定します |
|
| 結果をソートするフィールドを指定します |
|
| バックエンドデータベースでドキュメント全体の検索を実行するか、 MongoDB Search から直接保存されたソース フィールドのみを返すかを指定します |
|
| 検索タームに関する分析情報を検索するための追跡オプションを指定します |
これらのパラメータの詳細については、Atlas ドキュメントの $search 演算子参照の「フィールド」セクションを参照してください。