alsatian/postgres-search-bundle
A Symfony bundle that brings PostgreSQL full-text search to Doctrine applications, enabling native indexing and querying so you can add fast, relevant search without an external engine. It provides convenient integration for building search features directly on Postgres.
ts_rank. It explicitly does not buy typo tolerance, synonyms, faceting, highlighting, or semantic retrieval — so this package anchors a realistic "search v1" promise instead of an aspirational one.pgvector/Meilisearch" narrative that doesn't require rewriting the query layer.Consider it when:
laravel-doctrine.tsvector columns, GIN indexes, weighted field sets, and to_tsquery/ts_rank query building without hand-rolling custom DQL for every query.Look elsewhere when:
tsvector/tsquery, GIN indexes, setweight, websearch_to_tsquery) inside a thin service layer with DB::raw, or evaluate Laravel-native options such as Scout with a Postgres driver, Meilisearch, or Typesense. Consume ideas from this package, not code.pgvector.tsvector entirely and breaks common Symfony test setups that run against SQLite.Due diligence before any pilot: last commit date, CI status, test coverage, Postgres/Doctrine/PHP version constraints, license, how index creation is handled in migrations, whether the SQL uses safe parsing (websearch_to_tsquery/plainto_tsquery) versus string-concatenated user input, and whether custom DQL functions survive a Doctrine major-version upgrade.
For executives (one paragraph): We can ship ranked keyword search on the database we already run — no new vendor contract, no new infrastructure to operate, near-zero marginal cost. The approach is standard PostgreSQL full-text search; the package in question is thin Doctrine plumbing that saves boilerplate, and it is unmaintained with essentially no adoption, so we should treat it as a reference design we fork and own (a few hundred lines) rather than a dependency. Net effect: search capability in days rather than weeks, a fully reversible decision, and a clear evidence base if usage later justifies a dedicated search engine.
For engineering: This is a Symfony/Doctrine bundle, not a Laravel package — in our Laravel codebase the deliverable is a port of its tsvector column, setweight field boosting, GIN index, and ranked-query patterns into a small in-house service. Use websearch_to_tsquery or plainto_tsquery for user input (never string-concatenated to_tsquery), store the tsvector in a maintained column rather than computing it per query, wrap nullable columns in coalesce, and prefer DB triggers over Doctrine lifecycle callbacks since bulk updates skip listeners. If we do touch the bundle directly, review its generated SQL, pin versions, and re-test on Doctrine upgrades.
For product/finance: This avoids a search SaaS line item and an ops burden at current scale, and it gives us real query and zero-result data before we commit to anything recurring. The trade-off is a capability ceiling — no typo tolerance, synonyms, or semantic search — and that ceiling must be written into the search feature's acceptance criteria so expectations are set before launch, not after.
How can I help you explore Laravel packages today?