Scout を使用した全文検索
Overview
このガイドでは、 Lambda MongoDBアプリケーションで Lambda Scout 機能を使用する方法を学習します。Scout を使用すると、Eloquet モデルに全文検索を実装できます。詳しくは、Lambel ドキュメントの Lambda Scout を参照してください。
Lambda MongoDBの Scout 統合は次の機能を提供します。
MongoDBまたはSQLモデルからAtlas Search インデックスを作成するための抽象化を提供します。
重要
スキーマ ビルダを使用して検索インデックスを作成する
ドキュメントがすでにMongoDBにある場合は、 MongoDB PHPライブラリまたは
Schema
ビルダー メソッドを使用して検索インデックスを作成し、検索クエリーのパフォーマンスを向上させます。検索インデックスの作成の詳細については、Atlas Searchガイドの Atlas Search インデックスの作成 セクションを参照してください。MongoDBから Melisearch や Algolas などの検索エンジンにデータを自動的に複製できるようにします。MongoDB Elastic モデルをインポートとインデックスのソースとして使用できます。検索エンジンへのインデックス作成の詳細については、 Lambda Scout ドキュメントの「 インデックス作成 」セクションを参照してください。
重要
配置の互換性
Lambda Scout は、MongoDB Atlas配置に接続する場合にのみ使用できます。この機能は、自己管理型の配置では使用できません。
Atlas Search チュートリアルの Scout
このチュートリアルでは、Scout を使用して Elastic モデル( MongoDBまたはSQL )からMongoDB Atlas Searchのドキュメントを複合およびインデックス方法を説明します。
モデルに検索可能な属性を追加する
モデルが検索可能になるようにするには、Laravel\Scout\Searchable
トラッキングを実行します。次の例では、sample_mflix.movies
コレクション内のドキュメントを表す Movie
モデルにこの特性を追加します。
namespace App\Models; use MongoDB\Laravel\Eloquent\Model; use Laravel\Scout\Searchable; class Movie extends Model { use Searchable; protected $connection = 'mongodb'; }
また、Searchable
トラートを使用して、ドキュメントの再フォーマット、関連ドキュメントの埋め込み、またはドキュメント値の変換を行います。詳細については、Lambda Scout ドキュメントの「検索可能なデータの構成」セクションを参照してください。
アプリケーションで Scout を設定する
アプリケーションがデータベース接続としてMongoDB を使用するように構成されていることを確認します。MongoDBを構成する方法については、 クイック スタートガイドの「 MongoDB接続の構成 」セクションを参照してください。
アプリケーションで Scout を構成するには、アプリケーションの config
ディレクトリに scout.php
という名前のファイルを作成します。以下のコードをファイルに貼り付けて、Scout を構成します。
return [ 'driver' => env('SCOUT_DRIVER', 'mongodb'), 'mongodb' => [ 'connection' => env('SCOUT_MONGODB_CONNECTION', 'mongodb'), ], 'prefix' => env('SCOUT_PREFIX', 'scout_'), ];
上記のコードでは、次の構成を指定します。
SCOUT_DRIVER
環境変数の値をデフォルトの検索ドライバーとして使用します。または、環境変数が設定されていない場合はmongodb
検索可能なコレクションのコレクション名のプレフィックスとして
scout_
を指定します
config/scout.php
ファイルでは、カスタム Atlas Searchインデックス定義を指定することもできます。詳しくは、次のステップのカスタムインデックス定義の例を参照してください。
アプリケーションの .env
ファイルで次の環境変数を設定して、デフォルトの検索ドライバーとして mongodb
を選択します。
SCOUT_DRIVER=mongodb
Tip
キューイング
Scout を使用する場合は、アプリケーションの Web インターフェイスの応答時間を短縮するために、キュー ドライバーを構成することを検討してください。詳細については、Lambda Scout ドキュメントの「キューイング」セクションおよび「キューガイド」を参照してください。
Atlas Search インデックスの作成
Scout を構成し、デフォルトの検索ドライバーを設定したら、アプリケーションの ルートディレクトリから次のコマンドを実行中、検索可能なコレクションと検索インデックスを作成できます。
php artisan scout:index 'App\Models\Movie'
デフォルトの検索ドライバーとしてMongoDB を設定しているため、上記のコマンドはMongoDBデータベースに Atlas Searchインデックスを持つ検索コレクションを作成します。コレクションの名前は、前の手順で設定されたプレフィックスに基づいて、scout_movies
に基づきます。Atlas Searchインデックスの名前は scout
で、デフォルトでは次の構成です。
{ "mappings": { "dynamic": true } }
インデックス定義をカスタマイズするには、config/scout.php
ファイルの mongodb
エントリに index-definitions
構成を追加します。次のコードは、scout_movies
コレクションに作成するカスタムインデックス定義を指定する方法を示しています。
'mongodb' => [ 'connection' => env('SCOUT_MONGODB_CONNECTION', 'mongodb'), 'index-definitions' => [ 'scout_movies' => [ 'mappings' => [ 'dynamic' => false, 'fields' => ['title' => ['type' => 'string']] ] ] ] ], ...
Atlas Searchインデックス定義の定義の詳細については、Atlas ドキュメントの「 フィールド マッピングの定義 」ガイドを参照してください。
注意
MongoDB、 Atlas Searchインデックスの作成と確定に最大 分かかる場合があるため、scout:index
コマンドは成功メッセージをすぐに返さない可能性があります。
検索可能なコレクションへのデータのインポート
Scout を使用して、Eloquet モデルによってモデル化されたソースコレクションから検索可能なコレクションにデータを複製できます。次のコマンドは、movies
コレクションのデータを、前のステップでインデックス付きの scout_movies
コレクションに複製してインデックスを作成します。
php artisan scout:import 'App\Models\Movie'
Atlas Search クエリのドキュメントは自動的にインデックス化されます。
Tip
インポートするフィールドの選択
検索可能なコレクションには、ソース ドキュメントのすべてのフィールドが必要ない場合があります。複製するデータ量を制限すると、アプリケーションの速度とパフォーマンスが向上します。
Eloqueent モデルクラスで toSearchableArray()
メソッドを定義することで、インポートする特定のフィールドを選択できます。次のコードは、レプリケーションの plot
フィールドと title
フィールドのみを選択するための toSearchableArray()
を定義する方法を示しています。
class Movie extends Model { .... public function toSearchableArray(): array { return [ 'plot' => $this->plot, 'title' => $this->title, ]; } }
これらの手順を完了すると、 Lambda MongoDBアプリケーションの scout_movies
コレクションに対して Atlas Search クエリを実行できます。全文検索を実行する方法については、「 Atlas Searchガイド 」を参照してください。