kainiklas/filament-scout

将Filament插件集成到全局搜索和表格搜索中。

v0.4.0 2024-04-18 20:47 UTC

This package is auto-updated.

Last update: 2024-09-08 09:07:01 UTC


README

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

Filament Scout Plugin

插件,用于将Laravel Scout集成到Filament的全局搜索表格搜索中。还包含一个ScoutSelect组件,它增强了标准选择字段的功能,使其具有scout搜索能力。

先决条件

  • Laravel Scout:根据Laravel文档中的说明安装和配置Laravel Scout。

安装

您可以通过composer安装此包

composer require kainiklas/filament-scout

表格搜索

要使用Scout搜索而不是表格上的默认搜索,请将特性InteractsWithScout添加到包含表格的任何页面中,例如app\Filament\Resources\MyResource\Pages\ListMyResources.php

use Kainiklas\FilamentScout\Traits\InteractsWithScout;

class ListMyResources extends ListRecords
{
    use InteractsWithScout;
}

在资源中定义的表格需要像在Filament表格文档中描述的那样进行searchable()。不再需要为每个列设置可搜索性,因为可搜索的内容定义在Scout中。

增加搜索结果数量

根据Scout引擎,您可能对获取的搜索结果数量有限制。这可以在两个地方进行调整

1. 搜索限制

添加以下env变量以调整搜索结果限制

SCOUT_SEARCH_LIMIT=100

100是此包中的默认值。例如,meilisearch的默认限制为20

2. 索引设置(以meilisearch为例)

在meilisearch中,默认总命中数为1000,这也是搜索限制的上限。这意味着如果想要超过1000个搜索结果,需要调整搜索限制和索引设置。索引设置可以在config\scout.php中进行调整。

'index-settings' => [
  MyClass::class => [
    'pagination' => [
      'maxTotalHits' => 10000
    ],
  ],
],

然后运行以下命令同步设置:php artisan scout:sync-index-settings

全局搜索

  1. 请参阅Filament文档中的全局搜索启用方法
class ContractResource extends Resource
{
    // required to enable global search
    protected static ?string $recordTitleAttribute = 'name';

    // optional: details
    public static function getGlobalSearchResultDetails(Model $record): array
    {
        return [
            'Category' => $record->category->name,
        ];
    }
}
  1. 将插件FilamentScoutPlugin添加到您的面板配置中,例如在app\Providers\Filament\AdminPanelProvider.php中。
use Kainiklas\FilamentScout\FilamentScoutPlugin;

class AdminPanelProvider extends PanelProvider
{
    public function panel(Panel $panel): Panel
    {
        return $panel
            $plugins([
                FilamentScoutPlugin::make()
            ]);
    }
}

Meilisearch

如果您使用Meilisearch,您可以激活meilisearch特定的功能(搜索上下文高亮)

  1. 配置插件。
use Kainiklas\FilamentScout\FilamentScoutPlugin;

class AdminPanelProvider extends PanelProvider
{
    public function panel(Panel $panel): Panel
    {
        return $panel
            $plugins([
                FilamentScoutPlugin::make()
                    ->useMeilisearch() // enables meilisearch specific features
            ]);
    }
}
  1. (可选) 在您的资源中实现/调整getGlobalSearchResultDetails()
public static function getGlobalSearchResultDetails(Model $record): array
    {
        // change the filament default implementation from this
        // return [
        //     'AttributeTitle' => $record->attribute_name
        // ];
        
        // to this
        return [
            'scout_attribute_name' => "AttributeTitle"
        ];
    }

选择表单字段

要启用选择表单字段中的scout搜索,请使用提供的ScoutSelect组件

use Kainiklas\FilamentScout\Forms\Components\ScoutSelect;
 
ScoutSelect::make('company_id')
    ->searchable()
    ->relationship('company', 'name')
    ->useScout() // must be called after relationship()

从技术上讲,ScoutSelect 组件继承自 Filament\Forms\Components\SelectuseScout() 方法设置一个新的 getSearchResultsUsing() 闭包,该闭包使用 scout。

重要:必须在关系方法之后调用 useScout() 方法。否则,它将被 relationship() 方法覆盖。

提示:只有由 scout 可访问和定义的值才可搜索。

测试

composer test

变更日志

有关最近更改的更多信息,请参阅 变更日志

贡献

有关详细信息,请参阅 贡献指南

安全漏洞

请查阅我们关于如何报告安全漏洞的 安全策略

鸣谢

许可协议

MIT 许可协议 (MIT)。有关更多信息,请参阅 许可文件