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();
我为文章、事件等多个模型执行此操作,脚本最终变得臃肿。我按照文档中的必要步骤设置 Laravel Scout 以使用 TNTSearch 使用他们提供的 Laravel 包。
它在 Laravel 文档中说 Laravel Scout 不太擅长高级 where 子句,所以在页面下方的文档后面,我做了类似的事情这在我的控制器的顶部。
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;
}
在我的数据库 table 中,它应该只有 return 个发布等于 'open' 的模型(或者我认为)。但是,我 运行 以下命令:
php artisan scout:import "App\Article"
然后搜索了一下,还是returns 关闭的文章。我认为通过定义 shouldBeSearchable
可以防止这种情况?
此外,在执行 Scout 搜索时是否可以索引模型上的关系?例如,如果用户有个人资料,我可以使用 Scout 来搜索与该用户相关的个人资料吗?我希望能够在框中输入文本,然后让 Scout 扫描文本和 return 配置文件所属的用户。
我假设您正在使用 teamtnt/laravel-scout-tntsearch-driver?如果是这样,它还不支持 Scout 的 shouldBeSearchable 功能。
这里是相关问题单:https://github.com/teamtnt/laravel-scout-tntsearch-driver/issues/153
我正在使用 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();
我为文章、事件等多个模型执行此操作,脚本最终变得臃肿。我按照文档中的必要步骤设置 Laravel Scout 以使用 TNTSearch 使用他们提供的 Laravel 包。
它在 Laravel 文档中说 Laravel Scout 不太擅长高级 where 子句,所以在页面下方的文档后面,我做了类似的事情这在我的控制器的顶部。
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;
}
在我的数据库 table 中,它应该只有 return 个发布等于 'open' 的模型(或者我认为)。但是,我 运行 以下命令:
php artisan scout:import "App\Article"
然后搜索了一下,还是returns 关闭的文章。我认为通过定义 shouldBeSearchable
可以防止这种情况?
此外,在执行 Scout 搜索时是否可以索引模型上的关系?例如,如果用户有个人资料,我可以使用 Scout 来搜索与该用户相关的个人资料吗?我希望能够在框中输入文本,然后让 Scout 扫描文本和 return 配置文件所属的用户。
我假设您正在使用 teamtnt/laravel-scout-tntsearch-driver?如果是这样,它还不支持 Scout 的 shouldBeSearchable 功能。
这里是相关问题单:https://github.com/teamtnt/laravel-scout-tntsearch-driver/issues/153