Laravel Scout 的 PostgreSQL 全文搜索
发布日期:作者: Paul Redmond
此 包 使得将原生 PostgreSQL 全文搜索功能与 Laravel Scout 结合使用变得容易
// plainto_tsquery()$posts = App\Post::search('cat rat') ->usingPlainQuery()->get() // phraseto_tsquery()$posts = App\Post::search('cat rat') ->usingPhraseQuery()->get() // to_tsquery()$posts = App\Post::search('fat & (cat | rat)') ->usingTsQuery()->get() // websearch_to_tsquery()// uses web search syntax$posts = App\Post::search('"sad cat" or "fat rat" -mouse') ->usingWebSearchQuery()->get() // DIY using a callbackuse ScoutEngines\Postgres\TsQuery\ToTsQuery; $results = App\Post::search('fat & (cat | rat)', function ($builder, $config) { return new ToTsQuery($builder->query, $config);})->get();
以下是一个模型示例
class Post extends Model{ use Searchable; // Configurable search data... // Bring other data (i.e., tags) to the index document public function toSearchableArray() { return [ 'title' => $this->title, 'content' => $this->content, 'author' => $this->user->name, 'tags' => $this->tags->pluck('tag')->implode(' '), ]; } public function searchableOptions() { return [ // Model search config for index settings, rank, etc. ]; }}
此集成的工作方式是,解析的文档模型数据将与 tsvector 类型 存储在同一表的 searchable
列中。您可以通过集成 searchableOptions()
方法来微调每个模型的工作方式,该方法允许您
- 可配置的列名(默认值为
searchable
) - 可以将排名组分配给表中的字段
- 可以为每个排名组配置排名权重
- 可以配置要使用的排名函数(
ts_rank
或ts_rank_cd
) - 排名归一化
- 等等...
您可以在 GitHub 上了解有关此包的更多信息,获取完整的安装说明,并查看 源代码。