検索テキスト
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 統合を使用して検索操作を実行する方法を示す実行可能なコード例については、次の使用例を参照してください。
フィルター条件に基づいてデータを取得する方法については、 「データの取得」ガイドを参照してください 。