[英]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.