Laravel Scout :我是否只在某个特定领域进行搜索?
目前这条线路正常运转:
$es = Element::search($q)->get();
但它搜索标题,短描述和描述字段。我需要它只搜索标题字段。
答案 0 :(得分:11)
您只需要通过添加以下代码来更改模型中的toSearchableArray
方法:
/**
* Get the indexable data array for the model.
*
* @return array
*/
public function toSearchableArray()
{
$array = $this->only('title', 'description');
$related = $this->user->only('name', 'email');
// Customize array...
return array_merge($array, $related);
}
然后致电php artisan scout:import App\YourModel
重新编制新记录。
注意:
$this->only('title', 'description')
将只搜索其标题和说明字段$this->user->only('name', 'email')
还会搜索相关模型的名称和电子邮件因此,您可以通过在搜索方法中添加->load('user')
来检索相关数据,如下面的代码:
public function search(Request $request)
{
$query = $request->get('q');
return Task::search($query)->get()->load('user');
}
如果您尝试使用 - > paginate()方法检索数据,则必须单独加载关系:
...
$tasks = Task::search($query)->paginate($request->get('per_page'));
$tasks->load('user');
return $tasks;
享受!
答案 1 :(得分:0)
您可以通过向侦察构建器实例添加回调函数来实现这一点,
Person::search($searchString)->query(function($query) {
$query->select(['title']);
})->get();