emild/laravel-fulltext

Laravel 的全文索引和搜索

1.7 2021-12-25 19:27 UTC

README

Latest Version on Packagist Software License Build Status Total Downloads Made by SWIS

此包为模型创建 MySQL 全文索引,并允许您通过这些索引进行搜索。

安装

  1. 使用 composer 安装 composer require swisnl/laravel-fulltext
  2. 发布迁移和配置 php artisan vendor:publish --tag=laravel-fulltext
  3. 迁移数据库 php artisan migrate

用法

该包使用模型观察者来更新索引,当模型发生变化时。如果您想运行一个完整的索引,可以使用控制台命令。

模型

Indexable 特性添加到您想索引的模型中,并定义您想索引的列作为标题和内容。

示例

class Country extends Model
{

    use \Swis\Laravel\Fulltext\Indexable;

    protected $indexContentColumns = ['biographies.name', 'political_situation', 'elections'];
    protected $indexTitleColumns = ['name', 'governmental_type'];

}

您可以使用点表示法查询模型的关联,如 biographies.name

搜索

您可以使用 Search 类进行搜索。

$search = new \Swis\Laravel\Fulltext\Search();
$search->run('europe');

这将返回一个包含在多态关系 indexable 中的模型 \Swis\Laravel\Fulltext\IndexedRecord 的 Collection。

如果您只想搜索某个模型,可以使用 $search->runForClass('europe', Country::class);。这将仅返回该模型的结果。

命令

laravel-fulltext:all

为特定类索引所有模型

 php artisan  laravel-fulltext:all
 
Usage:
  laravel-fulltext:all <model_class>

Arguments:
  model_class           Classname of the model to index

示例

php artisan laravel-fulltext:all \\App\\Models\\Country

laravel-fulltext:one


Usage:
  laravel-fulltext:one <model_class> <id>

Arguments:
  model_class           Classname of the model to index
  id                    ID of the model to index

示例

php artisan laravel-fulltext:one \\App\\Models\\Country 4

选项

db_connection

选择要使用的数据库连接,默认为默认数据库连接。当您不使用默认数据库连接时,在运行迁移之前必须设置此选项才能正常工作。

weight.title weight.content

在结果中对 titlecontent 进行加权。搜索结果分数乘以此配置中的权重。

enable_wildcards

启用单词后的通配符。因此,当搜索例如 car 时,它也会匹配 carbon

exclude_feature_enabled

此功能排除某些行不被返回。当您在模型中有一个标志确定此记录是否必须出现在搜索查询中时启用此功能。默认情况下此功能是禁用的。

exclude_records_column_name

该属性的列名(用作标志)。这必须与表中的列名完全匹配。

使用此功能的一个示例

考虑一下当您有一个博客,然后您将此搜索功能添加到您的博客系统中以搜索您的博客文章时的情况。有时您不希望在搜索结果中显示某些文章,例如当文章尚未发布时。此功能可以帮助您实现这一点。

变更日志

请参阅 CHANGELOG 了解最近更改的详细信息。

测试

$ composer test

贡献

请参阅 CONTRIBUTINGCODE_OF_CONDUCT 了解详细信息。

安全

如果您发现任何与安全相关的问题,请通过电子邮件 security@swis.nl 而不是使用问题跟踪器。

鸣谢

许可

MIT 许可证 (MIT)。请参阅 许可文件 了解更多信息。

SWIS

SWIS 是一家来自荷兰莱顿的网页代理机构。我们热爱与开源软件合作。