Plugin to integrate Laravel Scout into Filament Global Search and Table Search. Plus a ScoutSelect component which enhances the standard Select Field with scout search capabilities.
- Laravel Scout: Install and configure Laravel Scout as described in the Laravel Docs.
You can install the package via composer:
composer require kainiklas/filament-scout
To use Scout Search instead of the default search on a table, add the trait InteractsWithScout
to any Page which contains a table, e.g. app\Filament\Resources\MyResource\Pages\ListMyResources.php
:
use Kainiklas\FilamentScout\Traits\InteractsWithScout;
class ListMyResources extends ListRecords
{
use InteractsWithScout;
}
The table defined in the resource needs to be searchable()
as described in the Filament table docs. Making each column searchable is not required anymore, as the content of what is searchable is defined within scout.
- Check how to enable Global Search in the Filament Documentation.
- Set a
$recordTitleAttribute
on your resource: Setting global search result title. - (Optional) Add details by implementing the method
getGlobalSearchResultDetails(Model $record)
in your Resource: Adding extra details to global search results.
- Set a
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,
];
}
}
- Add the Plugin
FilamentScoutPlugin
to your panel configuration, e.g., inapp\Providers\Filament\AdminPanelProvider.php
.
use Kainiklas\FilamentScout\FilamentScoutPlugin;
class AdminPanelProvider extends PanelProvider
{
public function panel(Panel $panel): Panel
{
return $panel
$plugins([
FilamentScoutPlugin::make()
]);
}
}
If you are using Meilisearch, you can activate meilisearch specific features (search context highlighting):
- Configure the plugin.
use Kainiklas\FilamentScout\FilamentScoutPlugin;
class AdminPanelProvider extends PanelProvider
{
public function panel(Panel $panel): Panel
{
return $panel
$plugins([
FilamentScoutPlugin::make()
->useMeilisearch() // enables meilisearch specific features
]);
}
}
- (Optional) Implement/ Adapt
getGlobalSearchResultDetails()
in your Resource:
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"
];
}
To enable scout search in your select form fields use the provided ScoutSelect
component:
use Kainiklas\FilamentScout\Forms\Components\ScoutSelect;
ScoutSelect::make('company_id')
->searchable()
->relationship('company', 'name')
->useScout() // must be called after relationship()
Technically, the ScoutSelect
component inherits from Filament\Forms\Components\Select
. The useScout()
method sets a new getSearchResultsUsing()
closure which uses scout.
Important: The useScout()
method needs to be called after the relationship method. Otherwise it is overriden by the relationship()
method.
Hint: Only values which are accessible and defined by scout are searchable.
composer test
Please see CHANGELOG for more information on what has changed recently.
Please see CONTRIBUTING for details.
Please review our security policy on how to report security vulnerabilities.
The MIT License (MIT). Please see License File for more information.