首頁  >  文章  >  資料庫  >  如何在 Laravel 中實現搜尋功能,在使用多個關鍵字進行多列搜尋時優先考慮相關性?

如何在 Laravel 中實現搜尋功能,在使用多個關鍵字進行多列搜尋時優先考慮相關性?

Patricia Arquette
Patricia Arquette原創
2024-11-05 16:00:03987瀏覽

How to implement a search function in Laravel that prioritizes relevance when searching across multiple columns with multiple keywords?

Laravel:在多列中使用多個關鍵字進行搜尋並按相關性排序結果

在Laravel 中,實作一個搜尋功能,該功能根據多個列中的多個關鍵字可能具有挑戰性,特別是當涉及相關順序時。本綜合指南詳細解決了這個問題,並提供了遵循結構化方法的解決方案。

資料庫結構

資料庫表涉及兩個欄位:meta_name 和 meta_description,其中將匹配搜尋關鍵字。

搜尋條件

搜尋具有特定條件,根據兩列中是否存在關鍵字對結果進行優先排序。包含所有三個關鍵字的行具有最高優先級,其次是僅包含前兩個關鍵字的行,最後是僅包含第一個關鍵字的行。

分頁

搜尋結果將使用分頁動態加載,當使用者捲動到頁面底部時會附加新結果。

源代碼

以下代碼片段檢索按所需順序排列搜索結果:

<code class="php">$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'));</code>

最終查詢

為了合併結果,我們使用unionAll 方法:

<code class="php">$posts = $all->unionAll($twoWords)->unionAll($oneWord)->get(); // check this first
# or
$posts = $all->unionAll($twoWords)->unionAll($oneWord)->skip($start)->take($this->rowperpage)->get();</code>

此程式碼按指定順序取得結果,並優先考慮相關性。 Skip() 和 take() 方法用於分頁,其中 $start 表示已顯示的結果數。最後,get()方法檢索記錄。

以上是如何在 Laravel 中實現搜尋功能,在使用多個關鍵字進行多列搜尋時優先考慮相關性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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