mmanos/laravel-search
A driver-based full-text search package for Laravel that lets you index and search Eloquent models with a simple, fluent API. Supports multiple backends and integrates cleanly into existing models and queries.
Architecture fit
mmanos/laravel-search is a self-contained Laravel 5 package: a service provider, a Searchable trait for Eloquent models, a search_index table migration, and artisan commands to build/refresh the index. Its default mode keeps all search state in the application database — no daemon, no additional infrastructure to operate — which makes it an attractive fit for an MVP or back-office/admin search where the corpus is small (roughly tens of thousands of rows) and relevance requirements are modest. The v1.0.5 release ("Fixed removed match type for elastic search") corrects an earlier assumption in this assessment: the package is not purely DB-backed. It carries an optional Elasticsearch code path, and this patch is a repair to that path. That gives two modes rather than one:
LIKE-style matching. No inverted index, no stemming, no faceting, no typo tolerance, and query cost grows with the size of the index table.The composite score (9.28) still reflects a small, clean, MIT-licensed codebase and should not be read as a production-readiness signal. The opportunity score (6.74) and the long gap since the 2017 release date remain the decision-relevant inputs. Net effect of v1.0.5 on architecture fit: unchanged for the DB mode, marginally more interesting on paper for the ES mode, and not enough to change the recommendation.
Integration feasibility
Low-to-moderate on a modern stack, high on a legacy one. The package targets Laravel 5.x and its composer.json will almost certainly constrain illuminate/support to 5.x and PHP to 5.5/7.0-era versions, which blocks installation on Laravel 9/10/11/12 (PHP 8.1+). It also likely calls helpers removed or renamed after 5.x (array_get, str_*, etc.). Integration onto a current Laravel version therefore requires a fork: bump constraints, replace deprecated helpers, add return types, re-run tests. On an existing Laravel 5.x application, integration is a same-day job on a single model.
v1.0.5 does not change the framework/PHP constraints — it is a one-line behavioral fix in the search-match layer, not a compatibility release. It neither unblocks modern Laravel nor introduces breaking changes. If anything it adds a scoping question: the ES path is now nominally maintained, which may tempt someone to adopt it, but adopting it means owning an Elasticsearch client generation alongside the Laravel fork.
Technical risk
LIKE-based matching over an index table degrades non-linearly; there is no planner escape hatch short of database full-text indexes, at which point the package is largely redundant.search_index table name can collide with existing application tables and complicates multi-tenant designs.Key questions
tsvector/MySQL FULLTEXT) on the table?search_index schema accommodate isolation?Stack fit Best fit: Laravel 5.x monolith on MySQL/Postgres with a small, slowly changing catalog and internal users, using DB mode only. Poor fit: Laravel 10+, high-QPS public search, multi-language content, or any product where search relevance is a differentiator. If the application is already on a modern Laravel version, the honest recommendation remains Laravel Scout with a managed engine — and that recommendation is strengthened, not weakened, by v1.0.5: if you are going to operate an Elasticsearch cluster anyway, Scout is the maintained path to it, and this package's ES client is a fork you would be adopting for no additional capability.
Migration path Two viable routes:
Searchable trait contract (search(), index sync on save/delete, reindex command) onto Scout plus a driver. The trait's surface is small, so the call sites are few; the real work is the indexing pipeline and backfill, which Scout also standardizes. If the ES mode was the attraction, this route gets you Elasticsearch without owning a Laravel 5-era client.Compatibility
Validate against the exact database engine and collation in production — LIKE semantics, case sensitivity, and index usage differ between MySQL and Postgres, and MySQL 8 reserved words can break generated SQL. Confirm the package's test harness (Orchestra/Testbench version) matches the target framework; if not, budget for rebuilding tests. Check for table-name collisions with the existing schema migration history. For the ES mode, pin and document the ES server version alongside the package version — the v1.0.5 fix exists precisely because that pin was implicit.
Sequencing
Maintenance Effectively permanent fork ownership. Budget recurring effort for PHP/framework upgrades, security review of the vendored code, and database compatibility. v1.0.5 does not change this: one patch release after a multi-year silence is not a maintenance guarantee, and it addresses one narrow defect rather than establishing a support cadence. There is no dependable upstream to consume fixes from; every change is ours to write, test, and carry. MIT licensing makes the fork legally clean but does nothing for the maintenance load.
Support Community-only. No maintainer triage, no SLA, no documented deprecation policy. Internal runbooks must be authored from scratch — indexing behavior, reindex cadence, and rollback procedures are undocumented and must be reverse-engineered from the source. If ES mode is adopted, the runbook must additionally record the ES server/client version pairing that the patched match-type logic assumes.
Scaling DB mode does not scale horizontally or vertically in a satisfying way: every query is a scan over the index table, and every write to a searchable model is an additional index write. Practical ceiling is a low-tens-of-thousands-row corpus with modest QPS; beyond that the mitigations are read replicas (partial help), database full-text indexes (which supersede the package), or replacement. ES mode moves the query load off the primary database but replaces it with a cluster to operate, size, and upgrade — a materially larger operational commitment than the package's default, and one this assessment would only sanction with a named owner. In both modes the index table/storage grows and becomes a backup-size concern over time.
Failure modes
search_index table name.Ramp-up Low technical ramp-up — the API is a trait plus a search call, learnable in a day; the ES mode adds a second configuration surface but no conceptual complexity. The higher cost is institutional: someone must own the fork, understand the indexing pipeline end to end, hold the replacement decision, and — new as of v1.0.5 — track which Elasticsearch version the optional path is actually good against. Treat it as a tactical bridge with an explicit expiry, not a platform commitment.
How can I help you explore Laravel packages today?