spine/postgres-search-bundle
PostgreSQL full-text search for Laravel: index your models, run ranked tsvector queries backed by GIN indexes, and keep results in sync automatically. A lightweight alternative to external search engines with no extra infrastructure or services to run.
tsvector/tsquery, ranking, stemming) through Doctrine. For a PM, it frames a concrete build-vs-buy question: can Postgres native FTS cover our search requirements (keyword match, relevance ranking, language-aware stemming) without adding a dedicated search service?Consider it only under a narrow, mostly historical set of conditions:
ts_rank relevance — and can accept Postgres's tokenizer and dictionary limitations (weak fuzzy/typo tolerance, limited multilingual behavior, no vector/semantic retrieval).Look elsewhere — or plan a replacement — when any of the following holds:
to_tsvector via whereFullText/whereRaw). Note this mismatch explicitly: the package was submitted as a Laravel/PHP package, but it is a Symfony bundle — a real due-diligence flag on whoever sourced it.Practical adoption test before committing: confirm the bundle installs against your current PHP/Doctrine versions in a spike; verify it can express your three most important search queries with acceptable ranking; measure query latency at target data volume; and confirm a named engineer owns the fork. If any of those fail, do not proceed.
For executives — the one-line version: This is a thin, abandoned 2016-era library for using Postgres's built-in search from a Symfony/Doctrine codebase. It is not a Laravel package, it has no community, and it has had no release in roughly nine years, so I do not recommend adopting it for new work — but it usefully frames a decision we do need to make about search.
The business case for the underlying approach (keep search in Postgres): For MVP and mid-scale search, Postgres full-text search can carry the feature without a new managed search service. That means no new vendor contract, no index-sync pipeline to build and operate, no second datastore to secure and back up, and one fewer system on call. The trade-off is search quality — no typo tolerance, limited multilingual and synonym handling, no semantic retrieval — and search load lands on the primary database.
The risk case for this specific package: zero stars, zero dependents, no release since September 2016, no visible maintainer. Adopting it means adopting the maintenance burden ourselves: version compatibility with current PHP and Doctrine, security patching, and eventual replacement. The expected cost is not the license (free) but the engineering ownership.
Recommendation: Do not introduce this bundle. If we want Postgres-native search, implement it directly against tsvector/tsquery with our own thin abstraction (or use Laravel's native full-text support, or Laravel Scout with a database driver) — a small, well-understood surface we control. If search relevance is a differentiator or the corpus grows beyond what one Postgres instance should serve, budget for Meilisearch, Typesense, or OpenSearch instead.
What I need from engineering: a day or two of spike work to (1) inventory whether anything in the current estate already depends on this bundle, (2) prove our top three search queries against native Postgres FTS with acceptable relevance and latency, and (3) give a rough size for building and owning that thin layer. With that, I can decide search architecture on evidence rather than on a nine-year-old dependency.
Ask of the business: treat "search stays in Postgres" as the default for now and revisit when relevance quality or query volume becomes a measurable customer complaint — not before.
How can I help you explore Laravel packages today?