Laravel Scout:有没有一种方法可以让我只在特定字段中搜索?
目前这条线路运行良好:
$es = Element::search($q)->get();
但它会搜索 title、shortdescription 和 description 字段。我需要它只在 title 字段中搜索。
您只需通过添加以下代码来更改模型中的
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;
享受吧!
您可以通过向 scout 构建器实例添加回调函数来做到这一点,
Person::search($searchString)->query(function($query) {
$query->addSelect(['title']);
})->get();
致力于
laravel 7
对于 meilisearch 这有效
Element::search('test',
function ($searchEngine, string $query, array $options) use ($filter) {
$searchEngine->resetSearchableAttributes();
$searchEngine->updateSearchableAttributes(['field_name']);
return $searchEngine->search($query, $options);
}
)
您可以通过向 scout 构建器实例添加回调函数来做到这一点,
Person::search($searchString)->query(function($query) {
$query->select(['title']);
})->get();
如果您想要标准的查询结果,但只在特定列(字段)中搜索,您可以尝试以下解决方案:
Element::search($query)->rule(function($builder) {
return [
'must' => [
'match' => [
'some_column_name' => $builder->query
]
]
];
});
在 Laravel 6 上进行了测试,但我认为它会在更高版本上工作......