Laravel Scout:仅在特定字段中搜索

问题描述 投票:0回答:5

Laravel Scout:有没有一种方法可以让我只在特定字段中搜索?

目前这条线路运行良好:

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

但它会搜索 titleshortdescriptiondescription 字段。我需要它只在 title 字段中搜索。

php laravel laravel-scout
5个回答
25
投票

您只需通过添加以下代码来更改模型中的

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
投票

您可以通过向 scout 构建器实例添加回调函数来做到这一点,

Person::search($searchString)->query(function($query) { 
       $query->addSelect(['title']);  
})->get();

致力于

laravel 7


1
投票

对于 meilisearch 这有效

Element::search('test',
    function ($searchEngine, string $query, array $options) use ($filter) {
        $searchEngine->resetSearchableAttributes();
        $searchEngine->updateSearchableAttributes(['field_name']);
        return $searchEngine->search($query, $options);
    }
)

0
投票

您可以通过向 scout 构建器实例添加回调函数来做到这一点,

Person::search($searchString)->query(function($query) { 
       $query->select(['title']);  
})->get();

0
投票

如果您想要标准的查询结果,但只在特定列(字段)中搜索,您可以尝试以下解决方案:

        Element::search($query)->rule(function($builder) {
            return [
                'must' => [
                    'match' => [
                        'some_column_name' => $builder->query
                    ]
                ]
            ];
        });

在 Laravel 6 上进行了测试,但我认为它会在更高版本上工作......

© www.soinside.com 2019 - 2024. All rights reserved.