首頁  >  文章  >  資料庫  >  如何在 Laravel 中實現多個關鍵字的相關搜尋?

如何在 Laravel 中實現多個關鍵字的相關搜尋?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-08 06:43:01350瀏覽

How to Implement a Relevant Search in Laravel with Multiple Keywords?

使用多個關鍵字和相關性排序的Laravel 搜尋

討論了一個常見問題Laravel 開發中的挑戰:實現針對多個資料庫列合併多個關鍵字的搜尋功能。搜尋結果必須根據相關性排序,並考慮指定關鍵字的存在和順序。

問題陳述

使用者正在嘗試在以下位置實現搜尋引擎Laravel 在搜尋欄中輸入多個關鍵字,結果按相關性順序顯示。要查詢兩個特定欄位:meta_name 和meta_description。搜尋條件如下:

    兩列包含所有三個關鍵字的行應優先考慮。
  • 只包含前兩個關鍵字的行應排名第二。
  • 只包含第一個關鍵字的行應排名第三。

解決方案

為了實現此排序,建構了三個單獨的資料庫查詢:

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

聯合和排序

最後,使用聯合組合三個結果集:

$posts = $all->union($twoWords)->union($oneWord)->skip($start)->take($this->rowperpage)->get();
此過程確保符合指定條件的行按需的相關順序檢索。

分頁和非同步載入

要實現滾動載入分頁,可以使用skip和take方法當使用者捲動時附加新結果。當沒有更多數據可顯示時,可以傳回一則訊息。

結論

使用提供的解決方案,搜尋功能將根據多個關鍵字檢索相關結果以及它們在指定列中的出現順序。結果將以滾動載入的方式顯示,提供無縫的使用者體驗。

以上是如何在 Laravel 中實現多個關鍵字的相關搜尋?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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