Laravelで複数の列にわたる順序付けされた関連性検索を実装するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-11-05 18:26:02
オリジナル
745 人が閲覧しました

How to Implement Ordered Relevance Search Across Multiple Columns in Laravel?

Laravel で順序付けされた関連性を備えた複数の列に対する複数のキーワードの検索

複数のデータベース列に対する複数のキーワードを含む検索機能の実装は、特に困難な場合があります。関連性に基づいて結果を並べ替える必要がある場合。 Laravel では、これに取り組むためのアプローチがいくつかあります。

データベース クエリを使用したアプローチ

この問題に対処する 1 つの方法は、複数のデータベース クエリを構築して、以下に基づいて結果を取得することです。具体的な基準。考えられる実装は次のとおりです。

$word1 = 'word1';
$word2 = 'word2';
$word3 = 'word3';

$all = DB::table('posts')
    ->where('meta_name', 'like', "%{$word1}%")
    ->where('meta_name', 'like', "%{$word2}%")
    ->where('meta_name', 'like', "%{$word3}%")
    ->orWhere(function($query) use ($word1, $word2, $word3) {
        $query->where('meta_description', 'like', "%{$word1}%")
              ->where('meta_description', 'like', "%{$word2}%")
              ->where('meta_description', 'like', "%{$word3}%");
    });

$twoWords = DB::table('posts')
    ->where('meta_name', 'like', "%{$word1}%")
    ->where('meta_name', 'like', "%{$word2}%")
    ->orWhere(function($query) use ($word1, $word2) {
        $query->where('meta_description', 'like', "%{$word1}%")
              ->where('meta_description', 'like', "%{$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'));

$posts = $all->union($twoWords)->union($oneWord)->get();
ログイン後にコピー

このアプローチでは、3 つのキーワードすべての存在、最初の 2 つのキーワードのみ、次に最初のキーワードのみの存在に基づいて結果をフィルタリングします。最後に、union 演算子を使用して結果を結合します。

ページネーションに関する追加の考慮事項

スクロール時ロード機能を実装するには、JavaScript および AJAX リクエストを組み込むことができます。ユーザーがページの一番下までスクロールすると、AJAX リクエストを送信して、次の結果セットを取得できます。クエリ ビルダーの Skip() メソッドと take() メソッドを使用して、取得するレコードのオフセットと制限を指定できます。

// Retrieve the specified number of results after the last loaded result
$start = $request->get('start');//how many results have already been shown

$records = Post::select('*')
                ->skip($start)
                ->take($this->rowperpage) // $this->rowperpage= 4 e.g.
                ->get();
ログイン後にコピー

スクロールできる結果がもうない場合の処理​​を忘れないでください。

以上がLaravelで複数の列にわたる順序付けされた関連性検索を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!