Overview
このガイドでは、 Lambda MongoDBを使用してテキストクエリを実行する方法を学習します。
テキストクエリを使用して、指定されたフィールドにタームまたはフレーズを含むドキュメントを取得できます。タームは、空白文字を除外する文字のシーケンスです。フレーズは、任意の数の空白文字を含むタームのシーケンスです。
このガイドでは、テキスト検索に使用できる Eloqueent モデル メソッドについて説明し、例を示します。Laravel 統合の効率モデルの詳細については、「 効率モデル セクション 」を参照してください。
始める前に
このガイドのコード例を実行するには、「クイック スタート 」チュートリアルを完了してください。 このチュートリアルでは、サンプル データを使用して MongoDB Atlas インスタンスを設定し、Lambda ウェブ アプリケーションで次のファイルを作成する手順を説明します。
Movie.phpファイル(moviesコレクション内のドキュメントを表すMovieモデルを含む)MovieController.phpファイル(データベース操作を実行するためのshow()関数を含む)browse_movies.blade.phpデータベース操作の結果を表示するための HTML コードを含む ファイル
次のセクションでは、Laravel アプリケーション内のファイルを編集して検索操作コード例を実行し、期待される出力を表示する方法について説明します。
検索テキスト フィールド
テキストクエリを実行する前に、テキスト値フィールドに テキストインデックス を作成する必要があります。インデックスの作成の詳細については、スキーマ ビルダガイドの「 インデックスの管理 」セクションを参照してください。
$text 演算子を使用し、その後に where() メソッドに渡すクエリフィルター内の $searchフィールドを使用して、テキストクエリを実行できます。$text 演算子は、テキストインデックス作成されたフィールドに対してテキストクエリを実行します。$searchフィールドは、検索するテキストを指定します。
where()メソッドを使用してクエリを作成したら、 get()メソッドを連鎖させてクエリ結果を検索します。
この例では、Movie Elonger モデルの where() メソッドを呼び出して、plotフィールドに "love story" というフレーズが含まれるドキュメントを検索します。このテキスト クエリを実行するには、コレクションに plotフィールドのテキストインデックスが 必要 です。
クエリを指定するには、次の構文を使用します。
$movies = Movie::where('$text', ['$search' => '"love story"']) ->get();
browse_moviesビューでクエリ結果を表示するには、 MovieController.phpファイルのshow()関数を次のコードのように編集します。
class MovieController { public function show() { $movies = Movie::where('$text', ['$search' => '"love story"']) ->get(); return view('browse_movies', [ 'movies' => $movies ]); } }
Title: Cafè de Flore Year: 2011 Runtime: 120 IMDB Rating: 7.4 IMDB Votes: 9663 Plot: A love story between a man and woman ... Title: Paheli Year: 2005 Runtime: 140 IMDB Rating: 6.7 IMDB Votes: 8909 Plot: A folk tale - supernatural love story about a ghost ... Title: Por un puèado de besos Year: 2014 Runtime: 98 IMDB Rating: 6.1 IMDB Votes: 223 Plot: A girl. A boy. A love story ... ...
検索スコア
テキストクエリは、各結果がクエリフィルター内の string にどの程度一致するかを示す数値テキスト スコアを割り当てます。関連性で結果を並べ替えるには、orderBy() メソッドを使用して textScoreメタデータフィールドで並べ替えます。$meta 演算子を使用して、このメタデータにアクセスできます。
$movies = Movie::where('$text', ['$search' => '"love story"']) ->orderBy('score', ['$meta' => 'textScore']) ->get();
Tip
orderBy()メソッドの詳細については、「 クエリ出力の変更 」ガイドの「 クエリ結果のソート 」セクションを参照してください。
詳細情報
Lambda 統合を使用して検索操作を実行する方法を示す実行可能なコード例については、次の使用例を参照してください。
フィルター条件に基づいてデータを取得する方法については、 「データの取得」ガイドを参照してください 。