capell-app / search
Production-grade site search for Capell with relevance-tuned results, synonyms, typo tolerance, curated promotions, and admin search insights.
Requires
- php: ^8.4
- capell-app/admin: ^1.0
- capell-app/core: ^1.0.25
- capell-app/discovery-foundation: ^1.0
- capell-app/frontend: ^1.0
- lorisleiva/laravel-actions: ^2.8
- spatie/laravel-data: ^4.5
- spatie/laravel-package-tools: ^1.14.1
Requires (Dev)
- orchestra/testbench: ^9.0
- pestphp/pest: ^3.0|^4.0
- pestphp/pest-plugin-laravel: ^3.0|^4.0
Suggests
- capell-app/site-discovery: Enables sitemap generated-output coverage reporting for search-indexable URLs.
- laravel/scout: Enables Scout-backed public search across registered searchable sources.
- typesense/typesense-php: Provides the Typesense client when host applications configure Scout to use Typesense.
Provides
None
Conflicts
None
Replaces
None
- dev-main / 1.x-dev
- v1.0.38
- v1.0.37
- v1.0.36
- v1.0.35
- v1.0.34
- v1.0.33
- v1.0.32
- v1.0.31
- v1.0.30
- v1.0.29
- v1.0.28
- v1.0.27
- v1.0.26
- v1.0.25
- v1.0.24
- v1.0.23
- v1.0.22
- v1.0.21
- v1.0.20
- v1.0.19
- v1.0.18
- v1.0.17
- v1.0.16
- v1.0.15
- v1.0.13
- v1.0.11
- v1.0.10
- v1.0.9
- v1.0.8
- v1.0.7
- v1.0.6
- v1.0.5
- v1.0.4
- v1.0.3
- v1.0.2
- v1.0.1
- v1.0.0-beta.2
- dev-release-backup/v0.0.9-main
- dev-release-backup/v0.0.8-main
This package is auto-updated.
Last update: 2026-09-17 07:51:55 UTC
README
What This Plugin Adds
Search is an Available, Schema-owning Capell package in the Capell Search & SEO product group. It ships as capell-app/search and extends these surfaces: admin, frontend, console.
Search adds public search, autocomplete, facets, synonyms, promoted results, spelling correction, and consent-aware search analytics.
Visitors can search indexed site content from the public search surface. Admins configure search behaviour and inspect top, trending, clicked, and zero-result queries.
Evidence: src/Actions/RunSearchAction.php, src/Actions/RunAutocompleteSearchAction.php, src/Actions/BuildSearchFacetGroupsAction.php, tests/Feature/Http/SearchControllerTest.php, routes/web.php, src/Filament/Pages/SearchSettingsPage.php, src/Actions/BuildTopSearchesQueryAction.php, src/Actions/BuildZeroResultSearchesQueryAction.php.
Status details:
- Status: Available
- Tier: premium
- Bundle: search-seo
- Composer package:
capell-app/search - Namespace:
Capell\Search - Theme key: not applicable
Why It Matters
For developers: The searchable-source registry and Search contract keep indexing backends replaceable while Actions normalize, sanitize, enhance, and record queries.
For teams: Teams can help visitors find content and use failed or repeated searches to decide which synonyms, promoted results, or content gaps to address.
Evidence: src/Support/SearchableSourceRegistry.php, src/Contracts/Search.php, src/Actions/SanitizeSearchResultAction.php, tests/Feature/Providers/SearchServiceProviderTest.php, docs/overview.admin.md, src/Actions/CreateSynonymFromZeroResultSearchAction.php, src/Actions/CreatePromotedResultFromZeroResultSearchAction.php, tests/Feature/Actions/ZeroResultCurationActionsTest.php.
Screens And Workflow
Screenshot contract: docs/screenshots.json.
- Frontend search results page (frontend, required evidence).
- Header search field (frontend, supplementary evidence).
- Top searches widget (admin, required evidence).
- Trending searches widget (admin, supplementary evidence).
- Zero-result searches widget (admin, supplementary evidence).
- Site search settings screen (admin, supplementary evidence).
- Illustrative annotated search curation settings preview (frontend, required evidence).
Technical Shape
Service providers
Capell\Search\Providers\SearchServiceProviderCapell\Search\Providers\AdminServiceProvider
Config files
packages/search/config/capell-search.php
Migrations
packages/search/database/migrations/2026_05_10_190868_01_create_search_logs_table.phppackages/search/database/migrations/2026_05_21_000002_add_fulltext_index_to_search_database_table.phppackages/search/database/migrations/2026_07_12_000001_encrypt_search_log_pii.php
Settings migrations
packages/search/database/settings/2026_05_10_190869_01_add_search_settings.php
Settings classes
SearchSettings
Models
SearchLog
Filament classes
SearchSettingsPageSearchDashboardSettingsContributorSearchSettingsSchemaBuildsSearchInsightsWindowSearchOverviewStatsFilamentWidgetTopSearchesFilamentWidgetTrendingSearchesFilamentWidgetZeroResultSearchesFilamentWidget
Route files
packages/search/routes/web.php
Extension contracts
Search
Actions
ApplySearchResultEnhancementsActionBuildAutocompleteQuerySuggestionsActionBuildSearchFacetGroupsActionBuildSearchPageViewDataActionBuildTopClickedResultsQueryActionBuildTopSearchesQueryActionBuildTrendingSearchesQueryActionBuildZeroResultSearchesQueryActionCanCollectSearchAnalyticsActionCreatePromotedResultFromZeroResultSearchActionCreateSearchVisitorIdentityActionCreateSynonymFromZeroResultSearchActionFlushScoutSearchSourcesActionGenerateSearchClickTokenActionHashSearchRetentionValueActionIndexScoutSearchSourcesActionInstallSearchPackageActionNormalizeSearchFiltersActionNormalizeSearchQueryActionProbeScoutIndexHealthActionPublishSearchAssetsActionPurgeSearchLogsActionRecordSearchActionRecordSearchResultClickActionRegisterConfiguredSearchableSourcesActionResolveCorrectedSearchQueryActionResolveExpandedSearchQueriesActionResolvePromotedSearchResultsActionResolveSearchResultTypeLabelActionResolveSearchSettingActionRunAutocompleteSearchActionRunSearchActionSanitizeSearchResultAction
Data objects
AutocompleteQuerySuggestionDataAutocompleteSearchResponseDataAutocompleteSearchResultDataDatabaseFullTextSearchDatabaseSearchExpressionPromotedSearchResultDataSearchFacetGroupDataSearchFacetOptionDataSearchFilterDataSearchInsightsWindowDataSearchPageViewDataSearchQueryMetadataDataSearchRequestDataSearchResultDataSearchTermSummaryDataSearchVisitorIdentityDataSearchableSourceData
Command signatures
search:flushsearch:indexsearch:purge
Manifest action API
applySearchResultEnhancements: Capell\Search\Actions\ApplySearchResultEnhancementsActionbuildTopClickedResultsQuery: Capell\Search\Actions\BuildTopClickedResultsQueryActionbuildTopSearchesQuery: Capell\Search\Actions\BuildTopSearchesQueryActionbuildTrendingSearchesQuery: Capell\Search\Actions\BuildTrendingSearchesQueryActionbuildZeroResultSearchesQuery: Capell\Search\Actions\BuildZeroResultSearchesQueryActioncreatePromotedResultFromZeroResultSearch: Capell\Search\Actions\CreatePromotedResultFromZeroResultSearchActioncreateSynonymFromZeroResultSearch: Capell\Search\Actions\CreateSynonymFromZeroResultSearchActionflushScoutSearchSources: Capell\Search\Actions\FlushScoutSearchSourcesActionindexScoutSearchSources: Capell\Search\Actions\IndexScoutSearchSourcesActioninstall: Capell\Search\Actions\InstallSearchPackageActionnormalizeSearchQuery: Capell\Search\Actions\NormalizeSearchQueryActionpurgeSearchLogs: Capell\Search\Actions\PurgeSearchLogsActionrecordSearch: Capell\Search\Actions\RecordSearchActionrecordSearchResultClick: Capell\Search\Actions\RecordSearchResultClickActionresolveExpandedSearchQueries: Capell\Search\Actions\ResolveExpandedSearchQueriesActionresolvePromotedSearchResults: Capell\Search\Actions\ResolvePromotedSearchResultsActionrunSearch: Capell\Search\Actions\RunSearchAction
Scheduled commands
search:purge (monthly; package registered)
Console command classes
FlushSearchCommandIndexSearchCommandPurgeSearchLogsCommand
Manifest contributions
admin-page: Capell\Search\Manifest\SearchSettingsPageContributionagent-capability: Capell\Search\Manifest\SearchAgentToolContributionconsole-command: Capell\Search\Manifest\SearchConsoleCommandsContributiondashboard-widget: Capell\Search\Manifest\TopSearchesWidgetContributiondashboard-widget: Capell\Search\Manifest\TrendingSearchesWidgetContributiondashboard-widget: Capell\Search\Manifest\ZeroResultSearchesWidgetContributionhealth-check: Capell\Search\Manifest\SearchHealthContributionmodel: Capell\Search\Manifest\SearchLogModelContributionoverview-stat: Capell\Search\Manifest\SearchOverviewStatsContributionroute: Capell\Search\Manifest\SearchFrontendRouteContributionscheduled-job: Capell\Search\Manifest\SearchLogPurgeScheduleContributionsetting: Capell\Search\Manifest\SearchSettingsContribution
Health checks
Capell\Search\Health\SearchHealthCheck
Blade views
packages/search/resources/views/components/facets.blade.phppackages/search/resources/views/components/form.blade.phppackages/search/resources/views/components/header/autocomplete-results.blade.phppackages/search/resources/views/components/header/search-dialog.blade.phppackages/search/resources/views/components/header/search-modal.blade.phppackages/search/resources/views/components/header/search-trigger.blade.phppackages/search/resources/views/components/results.blade.phppackages/search/resources/views/filament/widgets/search-overview-stats.blade.phppackages/search/resources/views/layouts/frontend.blade.phppackages/search/resources/views/pages/search.blade.php
Cache tags
search
Data Model
- Required tables:
search_logs. - Models:
SearchLog. - Core record references in migrations:
sites via site_id,languages via language_id. - Migration files:
2026_05_10_190868_01_create_search_logs_table.php,2026_05_21_000002_add_fulltext_index_to_search_database_table.php,2026_07_12_000001_encrypt_search_log_pii.php. - Migration impact: run host migrations through the package install flow before opening package surfaces.
- Deletion/retention behaviour: migrations declare null-on-delete relationships; retention is scheduled through
search:purge(monthly; registered by the package provider).
Install Impact
- Required packages:
capell-app/admin,capell-app/core,capell-app/discovery-foundation,capell-app/frontend. - Admin navigation: declares
admin-page: SearchSettingsPageContribution; each Filament page or resource controls its own navigation visibility. - Admin/editor extensions:
dashboard-widget: TopSearchesWidgetContribution,dashboard-widget: TrendingSearchesWidgetContribution,dashboard-widget: ZeroResultSearchesWidgetContribution,overview-stat: SearchOverviewStatsContribution. - Permissions: Shield-generated page permissions for
Capell\Search\Filament\Pages\SearchSettingsPage(names and grants depend on host Shield configuration). - Public routes: loads
routes/web.php; registersSearchFrontendRouteContribution. - Database changes: package migrations are declared.
- Config:
config/capell-search.php. - Settings:
Capell\Search\Settings\SearchSettings. - Queues or schedules: scheduled commands
search:purge (monthly; package registered). - Cache tags:
search. - Commands:
search:flush,search:index,search:purge.
Common Pitfalls
- Keep required Capell packages on compatible v4 releases:
capell-app/admin,capell-app/core,capell-app/discovery-foundation,capell-app/frontend. - Run migrations before opening package resources or public routes.
- Review package configuration before production-like verification:
config/capell-search.php,Capell\Search\Settings\SearchSettings. - Review middleware, throttling, signatures, and public-output safety in
routes/web.phpbefore exposing routes. - Keep the host Laravel scheduler running so package-registered schedules can execute:
search:purge (monthly; package registered). - Keep public Blade and cached HTML free of authoring markers, model IDs, permissions, signed editor URLs, and lazy database queries.
- Custom write integrations must preserve invalidation for
searchcache tags.
Troubleshooting
| Symptom | Likely cause | Check | Fix |
|---|---|---|---|
| Package surface is missing after install | Provider or manifest is not loaded | Confirm capell.json, package composer.json, and provider registration |
Reinstall the package, refresh Composer autoload, and clear host caches |
| Admin screen or command fails on missing table | Package migrations have not run | Check the tables listed in Data Model |
Run host migrations and rerun the focused package test |
| Route returns unexpected output | Route cache, middleware, or signed URL setup does not match the package route file | Check the route files listed in Technical Shape |
Clear route cache and verify middleware before exposing public routes |
| Background work does not run | Queue worker or declared schedule is not active | Check the jobs and scheduled commands listed in Technical Shape |
Start the queue worker or host scheduler, then run the focused command or package test |
| Public output leaks unexpected state | Render data, cache variation, or authoring boundary has regressed | Check public Blade, cache tags, and public-output safety tests | Move data loading out of Blade and rerun the package public-output tests |
Quick Start
- Install the package:
composer require capell-app/search. - Open
/search?q=capelland confirm the public output renders without admin state.
Next Steps
- Package docs
- Overview
- Worked extension examples
- Admin guide
- Configuration files:
config/capell-search.php. - Troubleshooting
- Screenshot contract
- Marketplace assets
- Capell content language plan
- Capell documentation design system
- Capell and package ERD notes
- Related packages: Discovery Foundation, Seo Suite, Site Discovery, Url Manager.
- Focused tests:
vendor/bin/pest packages/search/tests --configuration=phpunit.xml.

