Laravel Scout:仅搜索特定领域

时间:2017-09-01 16:34:45

标签: laravel-scout

Laravel Scout :我是否只在某个特定领域进行搜索?

目前这条线路正常运转:

    $es = Element::search($q)->get();

但它搜索标题短描述描述字段。我需要它只搜索标题字段。

2 个答案:

答案 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();