Overview
このガイドでは、 Lambda MongoDBを使用してテキストクエリを実行する方法を学習します。
テキストクエリを使用して、指定されたフィールドにタームまたはフレーズを含むドキュメントを取得できます。タームは、空白文字を除外する文字のシーケンスです。フレーズは、任意の数の空白文字を含むタームのシーケンスです。
This guide describes the Eloquent model methods that you can use to search text and provides examples. To learn more about Eloquent models in the Laravel Integration, see the Model Your Data section.
始める前に
このガイドのコード例を実行するには、「クイック スタート 」チュートリアルを完了してください。 このチュートリアルでは、サンプル データを使用して 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 統合を使用して検索操作を実行する方法を示す実行可能なコード例については、次の使用例を参照してください。
To learn how to retrieve data based on filter criteria, see the Retrieve MongoDB Data guide.