meilisearch/search-bundle
A Symfony bundle that integrates Meilisearch into your application, delivering fast, typo-tolerant search and autocomplete with simple configuration, automatic indexing, and customizable searchable entities.
Architecture fit — the headline finding is a framework mismatch. Despite being catalogued here as a "Laravel/PHP package," meilisearch/search-bundle is a Symfony bundle (repo: meilisearch-symfony). It ships a Bundle subclass, a DI extension, autowired services (Meilisearch, Aggregator, SearchableRepository), PHP attributes for index settings, and console commands (meilisearch:import, meilisearch:create-index, meilisearch:update-settings). None of that is loadable by Laravel's service container — Laravel does not register Symfony bundles, so the integration does not "just work" in a Laravel app. The reusable asset for a Laravel team is the underlying meilisearch/meilisearch-php SDK and the concepts this bundle encodes (index settings as code, searchable/aggregator objects, index naming), not the bundle itself.
Concretely, the framework fit splits three ways:
laravel/scout + meilisearch/meilisearch-php) instead. Same engine, same server, idiomatic integration.meilisearch-php directly (PSR-18/PSR-17 based) and skip the bundle entirely.Integration feasibility. Feasible in days, not weeks, provided the framework question is settled first. The bundle's surface area is small and declarative: you annotate or configure an index, define searchable/filterable/sortable attributes, and the bundle reconciles settings and pushes documents. The real work is not library plumbing — it is defining index settings, backfilling documents, and wiring reindex triggers. Those tasks are ~80% identical whether you land on this bundle or on Scout, so an evaluation spike on either transfers to the other.
Technical risk.
meilisearch-php and Symfony majors; the server has its own version line. Client/server skew produces confusing 400s on settings and search params. Pin all three: Symfony minor, bundle version, meilisearch-php version, and Meilisearch server image tag.Key questions to resolve before committing engineering time:
LIKE, Algolia, Elasticsearch) and what is the acceptable relevance regression during cutover?Stack fit. Two viable postures, and the choice should be made explicitly rather than by default:
laravel/scout (queue-driven indexing) + meilisearch/meilisearch-php. Scout's searchableAs, toSearchableArray, and searchable() hooks map closely onto what the Symfony bundle's attributes express, so the design translates.meilisearch:* commands in the deploy pipeline.meilisearch-php as the shared dependency and treat the bundle as a Symfony-only convenience layer. Do not attempt to bridge the DI containers.Migration path. Assume a phased, reversible cutover rather than a flag-day swap:
Compatibility checks. Run composer why-not against the target Symfony/Laravel version before estimating; verify PHP version floor (8.1+ typical for current Symfony majors); confirm PSR-18 HTTP client availability in the app; confirm the Meilisearch server version supports every query parameter you plan to use (parameter support has moved between server minors).
Sequencing. Settle framework → pin versions → settings-as-code → backfill → comparison harness → dual-write → flagged cutover. Front-load the comparison harness; it is the long pole for stakeholder confidence and is frequently skipped.
Maintenance. The bundle itself is low-maintenance — small footprint, active vendor releases, permissive license. The ongoing cost sits outside the library: index settings drift, synonym curation, ranking-rule tuning, and reindex orchestration when schema or toSearchableArray equivalents change. Budget a recurring slice of a backend engineer's time plus periodic product review of search quality. Every change to a searchable model implies a reindex; document that contract or it will be forgotten during a schema migration.
Support. MIT with community issue tracking; there is no commercial SLA on the bundle. If you need a supported search surface, that comes from Meilisearch Cloud, not from this package. Internal on-call needs a documented escalation path for "search is broken" — distinguish index stale from engine down from relevance bad, because the fixes and owners differ.
Scaling. Meilisearch's scaling model is the constraint to internalize early: index memory footprint scales with document count and attribute count, and read scaling typically means replicas rather than sharding. Indexing is asynchronous — every write enqueues a task, and the default failure mode is silent staleness because nobody polls the task status. Build task-status polling into the indexing pipeline from day one, with alerting on failed tasks. Watch queue-worker backlog where indexing is queued (Scout, or your own observers): a backed-up worker means users search a stale index while everything looks healthy.
Failure modes to design against:
Ramp-up. A mid-level PHP engineer can be productive in roughly one sprint on the happy path (index a model, query it, run the console commands) in the matching framework. Add a second sprint for production concerns: queue-driven indexing, task monitoring, reindex runbook, and the comparison harness. Relevance tuning is not a ramp-up item — it is ongoing product work with no natural end state. Given the middling opportunity score (48.77) and thin ecosystem signal, the recommendation is to proceed, but only after the framework question is answered: on Laravel, use Scout and treat this package as reference material; on Symfony, adopt the bundle directly.
How can I help you explore Laravel packages today?