Overview
このガイドでは、 MongoDB Search 機能を使用して、ドキュメントに対して検索を学ぶことができます。Laravel MongoDB は、モデルでMongoDB 検索クエリを直接実行するためのAPIを提供します。このガイドでは、MongoDB 検索インデックスの作成方法と、Laravel 統合を使用して検索を実行する方法の例を示します。
注意
配置の互換性
MongoDB Search の機能は、MongoDB Atlas クラスターに接続している場合にのみ使用できます。この機能は自己管理型配置には利用できません。
MongoDB Search の詳細については、Atlas ドキュメントの「概要」を参照してください。MongoDB Search API は内部で $search 集計演算子を使用してクエリを実行します。この演算子の詳細については、Atlas ドキュメントの $search リファレンスを参照してください。
注意
このガイドで説明されているメソッドは、すべてのタイプのMongoDB Search クエリで使用できない場合があります。より複雑なユースケースについては、 集計ビルダを使用して集計パイプラインを作成します。
MongoDBでベクトル埋め込みを検索するには、 Lambda MongoDB MongoDB ベクトル検索 API を使用できます。この機能の詳細については、「 MongoDB ベクトル検索ガイド 」を参照してください。
MongoDB Search インデックスの作成
MongoDB Search インデックスは、次のいずれかの方法で作成できます。
Schemaファサード上のcreate()メソッドを呼び出し、インデックス作成の詳細を含むsearchIndex()ヘルパーメソッドを渡します。この戦略について詳しくは、スキーマビルダガイドの「MongoDB Search と MongoDB Vector Search インデックスの管理」セクションをご覧ください。コレクションにアクセスしてから、次のコードに示すように、MongoDB PHP ライブラリから
createSearchIndex()メソッドを呼び出します。$collection = DB::connection('mongodb')->getCollection('movies'); $collection->createSearchIndex( ['mappings' => ['dynamic' => true]], ['name' => 'search_index'] );
重要
非同期検索インデックス操作
MongoDB Search インデックスの作成と削除の操作は非同期で実行されます。そのため、同じ名前空間内の同じ名前のインデックスが削除されている間は、新しいMongoDB Searchインデックスを作成できません。 MongoDB が競合インデックスを削除するまで待ってから、createSearchIndex() メソッドを呼び出します。
また、インデックスはクエリ可能になるまで待ってから使用する必要があります。インデックスがクエリ可能かどうかを確認するには、Collection::listSearchIndexes() メソッドを実行し、メソッドの出力で新しいインデックスを説明するドキュメントを見つけ、queryable フィールド値を確認します。インデックスの作成後に追加されたドキュメントは、クエリ結果ではすぐに使用できません。
クエリの実行
このセクションでは、Lambda 統合でMongoDB Search API を使用する方法を学習できます。
一般的なクエリ
Laravel 統合では、クエリ ビルダ メソッドとして、および Eloquent モデル メソッドとして search() メソッドが提供されます。search() メソッドを使用して、コレクション内のドキュメントに対してMongoDB 検索クエリを実行できます。
SearchOperatorInterface のインスタンス、または演算子タイプ、フィールド名、クエリ値を含む配列である search() メソッドには、operator パラメータを渡す必要があります。Search::text() メソッドを呼び出し、検索するフィールドと検索用語またはフレーズを渡すことで、SearchOperatorInterface のインスタンスを作成できます。
SearchOperatorInterface インスタンスを作成するためには、アプリケーションに次のインポート ステートメントを含める必要があります。
use MongoDB\Builder\Search;
次のコードでは、Movie モデルの titleフィールドに対してMongoDB Search クエリを実行し、'dream'タームを探します。
$movies = Movie::search( sort: ['title' => 1], operator: Search::text('title', 'dream'), )->all();
[ { "title": "Dreaming of Jakarta", "year": 1990 }, { "title": "See You in My Dreams", "year": 1996 } ]
search() メソッドを使用して、さまざまなタイプのMongoDB 検索クエリを実行できます。ご希望のクエリに応じて、次の任意パラメータを search() に渡すことができます。
任意のパラメーター | タイプ | 説明 |
|---|---|---|
|
| 使用するMongoDB検索インデックスの名前を指定します |
|
| 元のコンテキストで検索タームを表示するためのハイライトオプションを指定します |
|
| 専用の検索ノード上でセグメント間の検索クエリを並列化します |
|
| 結果の数を取得するためのカウント オプションを指定します。 |
|
| その点の直後から始まるドキュメントを返すための参照点を指定します。 |
|
| その点の直前から始まるドキュメントを返すための参照点を指定します。 |
|
| 結果のスコアの詳細な内訳を検索するかどうかを指定します |
|
| 結果をソートするフィールドを指定します |
|
| バックエンドデータベースでドキュメント全体の検索するを実行するか、 MongoDB Search から直接保存されたソース フィールドのみを返すかを指定します |
|
| 検索タームに関する分析情報を検索するための追跡オプションを指定します |
これらのパラメータの詳細については、Atlas ドキュメントの $search 演算子参照の「フィールド」セクションを参照してください。
オートコンプリートクエリ
Laravel 統合は、autocomplete() メソッドをクエリ ビルダ メソッドおよび Eloquent モデル メソッドとして提供します。autocomplete() メソッドを使用して、コレクション内のドキュメントに対してオートコンプリート検索を実行できます。このメソッドは、クエリ パスとして指定したフィールドの値のみを返します。
このタイプのMongoDB 検索クエリの詳細については、Atlas ドキュメントのオートコンプリート参照を参照してください。
注意
オートコンプリート検索を実行する前に、コレクションに オートコンプリート構成 のMongoDB Searchインデックスを作成する必要があります。検索インデックスの作成の詳細については、このガイドの「 MongoDB検索インデックスの作成 」セクションを参照してください。
次のコードは、titleフィールドで文字列 "jak" のMongoDB 検索するオートコンプリート クエリを実行します。
$movies = Movie::autocomplete('title', 'jak')->all();
[ "Dreaming of Jakarta", "Jakob the Liar", "Emily Calling Jake" ]
クエリをカスタマイズするために、次の任意のパラメーターを autocomplete() メソッドに渡すこともできます。
任意のパラメーター | タイプ | 説明 | デフォルト値 |
|---|---|---|---|
|
| ファジー検索とファジー検索オプションを有効にします |
|
|
| トークンを検索する順序を指定します |
|
これらのパラメーターの詳細については、Atlas ドキュメントの autocomplete 演算子リファレンスの「オプション」セクションを参照してください。