zicht/solr-bundle
A Symfony bundle that integrates Apache Solr search into your application, providing indexed search, query building, and document management through a clean, configurable service layer for fast, scalable full-text search.
Architecture fit. zicht/solr-bundle is a Symfony bundle, not a Laravel package. It ships a SolrBundle class extending Symfony's Bundle, registers services through the Symfony DI container, and exposes configuration via the Symfony Config component (Extension/Configuration tree). Laravel's service container, provider registration, and config loading are structurally different. That does not make it unusable, but it means the package's native integration surface — autoconfigured services, tagged services, event subscribers, console commands — will not be consumed by Laravel automatically. Any Laravel adoption is really "use the underlying Solr client/service classes inside a custom Laravel provider," not "install the bundle." That is a meaningful architectural tax to price in before committing.
Integration feasibility. The package appears to be a thin utility layer over a Solr client (historically Solarium), providing index/query wiring for Symfony applications. If that is the case, the transferable value is limited to a handful of classes: document/index abstractions, query builders, and possibly an indexing command. In Laravel, the equivalent and better-supported path is solarium/solarium directly, or Laravel Scout with a Solr driver, wrapped in a SolrServiceProvider and a small repository layer. The bundle adds very little that a Laravel team cannot wire in a day or two, while introducing a Symfony dependency chain (symfony/framework-bundle, symfony/dependency-injection, symfony/config) that conflicts with Laravel's own symfony/* component versions. Composer resolution is the first concrete risk.
Technical risk.
symfony/* ^6/^7. The composer.json constraints will very likely fail or require --ignore-platform-reqs, which is not something to run in production./select params, bin/post removal, atomic updates behavior). Utility bundles of this vintage often assume Solr 4/5-era semantics. This is a silent correctness risk — queries compile and return results, but edge features (faceting, highlighting, schema APIs) may not behave as expected.Key questions for the team.
solarium/solarium + a Laravel provider does not already give us? If the answer is "nothing concrete," do not proceed.symfony/* versions that conflict?Stack fit. Treat the package as a reference implementation, not a dependency. The realistic fit is: Laravel app → Solarium\Client (or an HTTP client to Solr) → thin repository/search-service layer → domain consumers. The bundle's value is as a prior-art spec for how to model documents, build queries, and run indexing — read it, port the pieces that are genuinely non-trivial, and discard the Symfony wiring. If there is a compelling reason to depend on the package itself, isolate it behind an interface (SearchIndex, SearchQuery) so it can be replaced without touching controllers or jobs.
Migration path.
composer require zicht/solr-bundle and document exactly what breaks (platform requirements, Symfony version conflicts, container bootstrapping). This produces hard evidence rather than speculation and settles the "depend vs. port" question.app/Search/Solr/, strip Symfony annotations/tags, replace DI with constructor injection.config/solr.php and a SolrServiceProvider with a singleton client. Keep connection params env-driven.Compatibility. Confirm PHP version against the bundle's composer.json; confirm symfony/framework-bundle constraints against Laravel's transitive Symfony components. If the bundle's constraints are ^2.8|^3.0, the answer is almost certainly "port, do not install." Confirm Solr server version and client library version alignment (Solarium 6 vs. 7 have breaking API changes).
Sequencing. Spike → decide → port/adapt → feature-flagged parallel run → cutover → decommission legacy path. Indexing jobs and schema changes should land before query-serving changes so reindexes are never blocked by read-path work.
Maintenance. Highest-cost item. An unmaintained, zero-adoption bundle means every future PHP or Symfony upgrade is a manual audit, and every Solr upgrade requires reading the bundle's source to determine behavior. Budget for a fork (vendor it into the monorepo or an internal package) with a named owner, or budget near-zero maintenance by porting the logic into application code you control. The latter is strongly preferable for a package with this adoption profile.
Support. No vendor SLA, no community, no Stack Overflow corpus. Internal engineers are the support tier. Onboarding new engineers will require reading source rather than documentation. If Zicht offers commercial support, get pricing and a support-term commitment in writing before depending on it; otherwise assume self-support.
Scaling. Solr scaling is a Solr-ops concern, largely independent of this bundle: replication vs. SolrCloud, shard strategy, JVM heap sizing, commit/soft-commit tuning. The bundle's contribution is limited to how it batches index updates and whether it respects commit policies — check for commitWithin usage and hardcoded commit=true, which will bottleneck bulk indexing. Query-side, verify the bundle does not force expensive defaults (facet.field on every request, rows large by default) that would need overriding at scale.
Failure modes.
composer install on a Friday deploy.Ramp-up. Low for the concept (Solr + a client library is well-trodden), but non-trivial for this specific artifact — engineers must read the bundle source to understand behavior, and the ported code becomes tribal knowledge unless documented. Estimate 1–2 engineer-weeks for a first working integration and parallel validation, plus ongoing ~1 day/month for dependency and Solr-version upkeep if the package is depended upon, or near-zero after a one-time port. Recommendation: do not adopt as a dependency; use it as a design reference and port the useful logic into a Laravel-native search layer with an explicit owner and a reindex runbook.
How can I help you explore Laravel packages today?