簡體   English   中英

Laravel Scout與TNTSearch

[英]Laravel Scout with TNTSearch

我正在使用Laravel Scout替換我的搜索功能,因為它以前是一條大型SQL LIKE語句,類似於以下內容。

$users = User::where('username', 'like', '%'.$request->get('q').'%')
    ->orWhere('displayName', 'like', '%'.$request->get('q').'%')
    ->orWhere('email', 'like', '%'.$request->get('q').'%')
    ->orWhere('role', 'like', '%'.$request->get('q').'%')
    ->orWhere('department', 'like', '%'.$request->get('q').'%')
    ->orWhere('location', 'like', '%'.$request->get('q').'%')
    ->orWhere('directDialIn', 'like', '%'.$request->get('q').'%')
    ->orWhere('mobileNumber', 'like', '%'.$request->get('q').'%')
    ->get();

我為多個模型(例如Article,Event等)執行此操作,腳本最終變得腫。 我按照文檔中的必要步驟進行了操作,並使用Laravel Scout使用它們提供的Laravel軟件包來使用TNTSearch。

它說在Laravel文檔中,Laravel Scout在高級where子句方面不那么擅長,因此,在文檔深入頁面之后,我在Controller的頂部做了類似的事情。

use Searchable;

public function shouldBeSearchable()
{
    return $this->published === "open";
}

/**
 * Get the indexable data array for the model.
 *
 * @return array
 */
public function toSearchableArray()
{
    $array = $this->toArray();

    // Customize array...

    return $array;
}

它應該只返回數據庫表中已發布等於“ open”的模型(或者我認為如此)。 但是,我運行以下命令:

php artisan scout:import "App\\Article"

然后執行搜索,它仍然返回已關閉的文章。 我認為通過定義shouldBeSearchable可以防止這種情況?

另外,執行Scout搜索時是否可以為模型上的索引建立索引? 例如,如果用戶有個人資料,我可以使用Scout搜索與該用戶相關的個人資料嗎? 我希望能夠在框中輸入文本,並讓Scout掃描文本並返回個人資料所屬的用戶。

我假設您正在使用teamtnt / laravel-scout-tntsearch-driver? 如果是這樣,它尚不支持Scout的shouldBeSearchable函數。

這是相關的問題單: https : //github.com/teamtnt/laravel-scout-tntsearch-driver/issues/153

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM