Overview
このガイドでは、Atlas Search 機能を使用してドキュメントを検索する方法を学習できます。PHP ライブラリを使用すると、集計ビルダを用いて Atlas Search クエリを実行できます。
注意
配置の互換性
Atlas Search 機能は、MongoDB Atlasクラスターに接続する場合にのみ使用できます。この機能は、自己管理型の配置では使用できません。
Atlas Search の詳細については、「 Atlas Search の概要」を参照してください。PHP ライブラリの Atlas Search の実装は、クエリを実行するために内部的に $search
集計演算子を使用します。この演算子の詳細については、Atlas ドキュメントの $search リファレンスを参照してください。
注意
Atlas Vector Search
Atlas Search インデックス
Atlas Search クエリを実行する前に、コレクションに Atlas Search インデックスを作成する必要があります。このインデックス タイプの作成について詳しくは、Atlas Search インデックスガイドをご覧ください。
検索集計ステージ
集計ビルダ を使用して Atlas Search クエリを実行するには、次のクラスをアプリケーションにインポートします。
use MongoDB\Builder\Pipeline; use MongoDB\Builder\Search; use MongoDB\Builder\Stage;
集計パイプラインに $search
ステージを作成するには、次のアクションを実行します。
パイプラインステージを保存するには、
Pipeline
インスタンスを作成します。Stage::search()
メソッドを呼び出して、Atlas Search ステージを作成してください。search()
メソッドの本体内で、Search
ビルダ クラスのメソッドを使用して、検索クエリの条件を作成します。
次のコードは、基本的な Atlas Search クエリを作成するためのテンプレートを示しています。
$pipeline = new Pipeline( Stage::search( /* Atlas Search query specifications Search::compound(...) */ ), );
Atlas Search クエリの例
このセクションでは、集計ビルダを使用してさまざまなタイプの Atlas Search クエリを実行する方法を学習できます。このセクションの例では、sample_restaurants.restaurants
コレクションのサンプル データを使用します。
フィルター付き複合クエリ
2 つ以上の演算子を 1 つのクエリに結合するには、Search::compound()
メソッドを使用します。このメソッドは、must
や filter
などの句に対して名前付き引数を受け取ります。それぞれの句で、Search::text()
メソッドを使用して、全文検索を実行する際に検索する文字列を指定します。
この例では、以下の仕様を持つ Atlas Search クエリを実行します。
name
フィールドで string"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()
メソッドを提供します。
このタイプの Atlas Search クエリの詳細については、Atlas ドキュメントの「オートコンプリート リファレンス」を参照してください。
注意
Atlas Search インデックスはオートコンプリート クエリ用に設定する必要があります。詳細については、Atlas ドキュメントの「オートコンプリートのためのフィールドのインデックス作成方法」を参照してください。
次のコードで、name
フィールドの "Lucy"
という文字列に対して Atlas 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()
メソッドを使用して、さまざまな種類の Atlas Search クエリを実行できます。目的のクエリに応じて、次の任意のパラメーターを search()
に渡すことができます。
任意のパラメーター | タイプ | 説明 |
---|---|---|
|
| 使用する Atlas Search インデックスの名前を指定します |
|
| 元のコンテキストで検索タームを表示するためのハイライトオプションを指定します |
|
| 専用の検索ノード上でセグメント間の検索クエリを並列化します |
|
| 結果の数を取得するためのカウント オプションを指定します。 |
|
| その点の直後から始まるドキュメントを返すための参照点を指定します。 |
|
| その点の直前から始まるドキュメントを返すための参照点を指定します。 |
|
| 結果のスコアの詳細な内訳を検索するかどうかを指定します |
|
| 結果をソートするフィールドを指定します |
|
| バックエンド データベースで完全なドキュメント検索を実行するか、Atlas Search から保存されたソースフィールドのみを直接返すかを指定します |
|
| 検索タームに関する分析情報を検索するための追跡オプションを指定します |
これらのパラメータの詳細については、Atlas ドキュメントの $search
演算子参照の「フィールド」セクションを参照してください。