Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Search Bundle Laravel Package

kunstmaan/search-bundle

KunstmaanSearchBundle brings search functionality to Symfony applications, offering indexing, querying, and configurable integrations for Kunstmaan CMS content. It helps developers add flexible, maintainable site search and manage results through a structured bundle.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit

  • This is a Symfony bundle, not a Laravel package. It integrates through Symfony's DI container, bundle registration in AppKernel, and tagged services discovered by a compiler pass. A Laravel application has no native equivalent to bundle bootstrapping, so "install and configure" is not a realistic path.
  • The design pattern is sound and worth borrowing: each indexable domain object declares its own SearchConfigurationInterface implementation (document id, type, mapping, serialization) and registers it as a tagged service. That is a clean separation of indexing concerns from domain models.
  • The provider abstraction is nominal: only Elastica is supported, so the "swap providers" value proposition is theoretical rather than delivered.

Integration feasibility

  • Low as a direct dependency. Adoption requires either (a) running a legacy Symfony service alongside the Laravel app, (b) forking and porting the service-tagging and container wiring to Laravel's container and a service provider, or (c) treating the repo purely as a reference design.
  • Option (b) is not a port of a library so much as a rewrite of roughly a few hundred lines of glue code, since the meaningful logic is thin and lives mostly in Elastica.
  • The official elasticsearch-php client, or Laravel Scout with a custom engine, gives the same capability with active maintenance.

Technical risk

  • High and compounding. Last release 2014-04-05; 18 stars, 0 dependents, no release cadence, no maintainer signal. Effectively abandoned.
  • Elasticsearch compatibility is the hard blocker: the bundle targets the ES 0.90–1.x era with mapping types (_type), now removed. It will not talk to ES 7/8 or OpenSearch without changes to both the client and the query/mapping layer.
  • PHP/Symfony drift: code from that era assumes PHP 5.x semantics and Symfony 2.x APIs, which conflicts with PHP 8.1+ and Symfony 5/6. Expect deprecation failures, not just warnings.
  • Security posture: no CVE process, no patched dependency chain. Shipping it means accepting an unaudited transitive dependency tree (Elastica and its HTTP layer) into your attack surface.

Key questions

  1. Is the target application actually Laravel, or is this a Symfony/Kunstmaan CMS estate where the bundle is a natural fit?
  2. Which Elasticsearch/OpenSearch version is in production, and is there an upgrade planned within the next 12 months?
  3. Is the requirement specifically "declare indexable objects via tagged services," or is it general full-text search with facets and highlighting?
  4. Who owns the fork if we adopt it, and what is the acceptable time-to-patch for an upstream-less dependency?
  5. Does the write path tolerate synchronous indexing failures, or do we need a queue-backed indexer regardless of library choice?

Verdict: do not adopt as a dependency. Use it as a design reference for the SearchConfigurationInterface contract and build the equivalent on a maintained client.

Integration Approach

Stack fit

  • Poor for Laravel: no service provider, no config publishing, no facade, no queue integration, no Artisan commands. Every framework-level affordance must be built.
  • Adequate only for a Symfony 2.3–2.8 application already using Kunstmaan bundles, where the container tagging and node integration come for free.

Migration path

  • Reference-only (recommended): extract the contract — one interface per indexable entity exposing index name, document id, mapping, and a normalize/to-document method — then implement it as a Laravel interface plus a registry class bound as a singleton, with tagging via a SearchServiceProvider that reads a search.indexable tag array.
  • Fork-and-port: clone, strip Symfony bundle plumbing, replace Elastica calls with elasticsearch-php, retain the tagged-configuration discovery concept, and pin the fork internally. Budget for ongoing ownership, not a one-time port.
  • Sidecar: if the bundle must run unmodified, deploy it as an isolated legacy Symfony service exposing an indexing HTTP endpoint. This adds a network hop, a second runtime, and a second deploy pipeline — usually not justified at this scale.

Compatibility

  • Assumed operating envelope: PHP 5.3–7.0, Symfony 2.x, Elasticsearch 0.90–1.x, Elastica in the matching version range. Incompatible with Laravel 9/10/11 (PHP 8.1+) and Elasticsearch 8.x.
  • Composer resolution will likely require --ignore-platform-reqs or aggressive version pinning, both of which are red flags in a maintained codebase.

Sequencing

  1. Decide build vs. adopt; document the decision and the maintenance owner.
  2. Lock the search engine version and confirm mapping/alias strategy before writing indexer code.
  3. Define the indexable-object contract and registry.
  4. Implement index lifecycle: mapping creation, alias swap, full reindex command, incremental update hooks.
  5. Wire domain events to an async indexing job; add dead-letter handling.
  6. Backfill, dual-write during cutover, then retire the old path.
  7. Add search-quality instrumentation (zero-result rate, latency, click-through) before tuning relevance.

Operational Impact

Maintenance

  • Total cost of ownership is the dominant factor. An abandoned dependency transfers all bug-fixing, PHP-version compatibility, and client-upgrade work to your team, with no upstream to merge from. The 18-star / 0-dependent profile means no community backstop and no Stack Overflow corpus.
  • If forked, treat it as first-class internal code: owned repo, CI, changelog, and a named maintainer.

Support

  • No vendor, no SLA, no security advisory channel. Documentation is a README. Onboarding depends entirely on tribal knowledge and reading source.
  • Internal support burden is front-loaded: whoever integrates it becomes the permanent escalation point for search issues.

Scaling

  • Search scaling is Elasticsearch's problem, not the bundle's; the library is a thin shim and will not be the throughput bottleneck.
  • The real scaling risk is index topology. Per-object SearchConfigurationInterface implementations make multi-index and alias management manual, so growing document counts and mapping changes require hand-rolled reindex orchestration.
  • Synchronous indexing in the request path is the most common scaling failure; queue it from day one regardless of library.

Failure modes

  • Version lock: cannot upgrade the ES client or cluster without breaking the integration, creating a long-term platform ceiling.
  • Silent index drift: new fields absent from a declared mapping are dropped or rejected depending on cluster settings, producing partial results that look like relevance bugs.
  • Registration gaps: a mis-tagged or unregistered service means an entity is simply never indexed, with no error surfaced.
  • Stale index: failed indexing after a successful database write leaves divergence; the bundle provides no reconciliation or retry machinery.
  • Hard dependency on cluster availability where indexing is inline, turning a search outage into a write-path outage.
  • Dependency risk: unmaintained transitive packages with no patch path.

Ramp-up

  • High for engineers without Symfony 2-era experience; low-to-moderate for senior PHP engineers who can read the DI tagging pattern in an hour.
  • No external talent pool is familiar with this specific bundle, so ramp-up is entirely internal documentation and code reading.
  • Mitigation: because the useful surface is small, reimplementing the pattern on a maintained client typically costs less than onboarding anyone to the original.
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
octoberrain/html
octoberrain/extension
octoberrain/exception
octoberrain/contracts
frankyso/ipaymu
3mdikram/worldmoneywords
snowsoft/config
itmosoft/laravel-subscriptions
larva/laravel-ai-qwen
diephp/sequences
users-au/socialite-provider
twidpay/twid-logger
mrnewport/laravel-plaid
mrnewport/laravel-repo
mrnewport/laravel-docsign
mrnewport/laravel-stow
mrnewport/laravel-flow
mrnewport/laravel-priceable
mrnewport/laravel-nestedterms
fredmeng/laravel-apidoc-generator