Laravel Scout:仅搜索特定领域

use*_*810 5 laravel-scout

Laravel Scout:有没有一种方法可以只搜索特定的字段?

目前这条线工作正常:

    $es = Element::search($q)->get();
Run Code Online (Sandbox Code Playgroud)

但它搜索标题,描述描述字段.我需要它只搜索标题字段.

Ren*_*lho 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);
}
Run Code Online (Sandbox Code Playgroud)

然后调用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');
}
Run Code Online (Sandbox Code Playgroud)

UPDATE

如果您尝试使用 - > paginate()方法检索数据,则必须单独加载关系:

...
$tasks = Task::search($query)->paginate($request->get('per_page'));

$tasks->load('user');

return $tasks;
Run Code Online (Sandbox Code Playgroud)

请享用!

  • 这是一个不同的问题,告诉我们如何从搜索*索引*中删除字段。我们如何从*搜索*中删除字段而不从*索引*中删除它们?OP 可能仍然希望在其他上下文中搜索其他字段,或者在字段(例如状态字段)上使用“where()”过滤器。 (2认同)