複数のキーワードを使用した Laravel 検索と関連性の並べ替え
はじめに
この記事では、よくある質問について説明しますLaravel 開発における課題: 複数のデータベース列に対して複数のキーワードを組み込んだ検索機能の実装。検索結果は、指定されたキーワードの存在と順序を考慮して、関連性に基づいて並べ替える必要があります。
問題ステートメント
ユーザーが検索エンジンを実装しようとしています。 Laravelでは、検索バーに複数のキーワードを入力すると、関連性の高い順に結果が表示されます。 2 つの特定の列、meta_name と meta_description がクエリされることになります。検索基準は次のとおりです:
解決策
この順序付けを実現するために、3 つの別々のデータベース クエリが構築されます。
$all = DB::table('posts') ->where('meta_name', 'like', ... /* %word1% %word2% %word3% */) ->orWhere('meta_description', 'like', ... /* %word1% %word2% %word3% */); $twoWords = DB::table('posts') ->where('meta_name', 'like', ... /* %word1% %word2% */) ->orWhere('meta_description', 'like', ... /* %word1% %word2% */) ->whereNotIn('id', $all->pluck('id')); $oneWord = DB::table('posts') ->where('meta_name', 'like', ... /* %word1% */) ->orWhere('meta_description', 'like', ... /* %word1% */) ->whereNotIn('id', $all->pluck('id')) ->whereNotIn('id', $twoWords->pluck('id'));
結合と順序付け
最後に、3 つの結果セットが結合を使用して結合されます。
$posts = $all->union($twoWords)->union($oneWord)->skip($start)->take($this->rowperpage)->get();
このプロセスにより、行が指定された基準に一致することが保証されます。
ページネーションと非同期読み込み
ロードオンスクロールのページネーションを実装するには、skip and take メソッドを使用して、ユーザーがスクロールすると、新しい結果が追加されます。表示するデータがなくなった場合は、メッセージを返すことができます。
結論
提供されたソリューションを使用すると、検索機能は複数のキーワードに基づいて関連する結果を取得します。および指定された列での出現順序。結果はロードオンスクロール方式で表示され、シームレスなユーザー エクスペリエンスを提供します。
以上がLaravelで複数のキーワードを使用して関連検索を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。