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