Laravel Scout:有没有办法只在特定领域进行搜索?
目前这条线工作正常:
$es = Element::search($q)->get();
但它会搜索title、shortdescription和description字段。我需要它只在标题字段中搜索。
Laravel Scout:有没有办法只在特定领域进行搜索?
目前这条线工作正常:
$es = Element::search($q)->get();
但它会搜索title、shortdescription和description字段。我需要它只在标题字段中搜索。
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 builder 实例添加回调函数来做到这一点,
Person::search($searchString)->query(function($query) {
$query->select(['title']);
})->get();
对于 meilisearch 这有效
Element::search('test',
function ($searchEngine, string $query, array $options) use ($filter) {
$searchEngine->resetSearchableAttributes();
$searchEngine->updateSearchableAttributes(['field_name']);
return $searchEngine->search($query, $options);
}
)
您可以通过向 scout builder 实例添加回调函数来做到这一点,
Person::search($searchString)->query(function($query) {
$query->addSelect(['title']);
})->get();
从事laravel 7