Overview
このガイドでは、 MongoDB Search 機能を使用して、ドキュメントに対して検索を実行する方法を学習できます。 Lambda MongoDB は、モデルでMongoDB Search クエリを直接実行するためのAPIを提供します。このガイドでは、 MongoDB Search インデックスの作成方法と、Lambda 統合を使用して検索を実行する方法の例を示します。
注意
配置の互換性
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インデックスは、次のいずれかの方法で作成できます。
create()SchemaファサードでsearchIndex()メソッドを呼び出し、インデックス作成の詳細を含む ヘルパーメソッドを渡します。この戦略の詳細については、 スキーマ ビルダガイドの「 MongoDB Search とMongoDB ベクトル検索インデックスの管理 」セクションを参照してください。コレクションにアクセスしてから、次のコードに示すように、MongoDB PHP ライブラリから
createSearchIndex()メソッドを呼び出します。$collection = DB::connection('mongodb')->getCollection('movies'); $collection->createSearchIndex( ['mappings' => ['dynamic' => true]], ['name' => 'search_index'] );
クエリの実行
このセクションでは、Lambda 統合でMongoDB Search API を使用する方法を学習できます。
一般的なクエリ
Lambda 統合では、クエリ ビルダー メソッドとして、および Eloqueent モデル メソッドとして search() メソッドが提供されます。 search() メソッドを使用して、コレクション内のドキュメントに対してMongoDB Search クエリを実行できます。
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 クエリを実行できます。ご希望のクエリに応じて、次の任意パラメータを search() に渡すことができます。
任意のパラメーター | タイプ | 説明 |
|---|---|---|
|
| 使用するMongoDB Searchインデックスの名前を指定します |
|
| 元のコンテキストで検索タームを表示するためのハイライトオプションを指定します |
|
| 専用の検索ノード上でセグメント間の検索クエリを並列化します |
|
| 結果の数を取得するためのカウント オプションを指定します。 |
|
| その点の直後から始まるドキュメントを返すための参照点を指定します。 |
|
| その点の直前から始まるドキュメントを返すための参照点を指定します。 |
|
| 結果のスコアの詳細な内訳を検索するかどうかを指定します |
|
| 結果をソートするフィールドを指定します |
|
| バックエンドデータベースでドキュメント全体の検索を実行するか、 MongoDB Search から直接保存されたソース フィールドのみを返すかを指定します |
|
| 検索タームに関する分析情報を検索するための追跡オプションを指定します |
これらのパラメータの詳細については、Atlas ドキュメントの $search 演算子参照の「フィールド」セクションを参照してください。
オートコンプリートクエリ
Laravel 統合は、autocomplete() メソッドをクエリ ビルダ メソッドおよび Eloquent モデル メソッドとして提供します。autocomplete() メソッドを使用して、コレクション内のドキュメントに対してオートコンプリート検索を実行できます。このメソッドは、クエリ パスとして指定したフィールドの値のみを返します。
このタイプのMongoDB Search クエリの詳細については、Atlas ドキュメントの オートコンプリート参照を参照してください。
注意
オートコンプリート検索を実行する前に、コレクションに オートコンプリート構成 のMongoDB Searchインデックスを作成する必要があります。検索インデックスの作成の詳細については、このガイドの「 MongoDB検索インデックスの作成 」セクションを参照してください。
次のコードは、titleフィールドで文字列 "jak" のMongoDB Search オートコンプリート クエリを実行します。
$movies = Movie::autocomplete('title', 'jak')->all();
[ "Dreaming of Jakarta", "Jakob the Liar", "Emily Calling Jake" ]
クエリをカスタマイズするために、次の任意のパラメーターを autocomplete() メソッドに渡すこともできます。
任意のパラメーター | タイプ | 説明 | デフォルト値 |
|---|---|---|---|
|
| ファジー検索とファジー検索オプションを有効にします |
|
|
| トークンを検索する順序を指定します |
|
これらのパラメーターの詳細については、Atlas ドキュメントの autocomplete 演算子リファレンスの「オプション」セクションを参照してください。