首頁  >  文章  >  資料庫  >  如何在 Laravel 中實現跨多列的有序相關性搜尋?

如何在 Laravel 中實現跨多列的有序相關性搜尋?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-05 18:26:02748瀏覽

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

在Laravel 中針對具有有序相關性的多個列搜尋多個關鍵字

針對多個資料庫列實作涉及多個關鍵字的搜尋功能可能具有挑戰性,尤其是當需要根據相關性對結果進行排序時。在 Laravel 中,有許多方法可以解決這個問題。

使用資料庫查詢的方法

解決該問題的一種方法是建立多個資料庫查詢來檢索結果特定標準。這是一個可能的實現:

$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();

此方法根據所有三個關鍵字的存在、僅前兩個關鍵字、然後僅第一個關鍵字來過濾結果。最後,它使用聯合運算子組合結果。

分頁的其他注意事項

要實現滾動載入功能,您可以合併 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn