Description
Full-Text Row Search applies PostgreSQL text search and ranking to Dotabase titles, bodies, and indexed row content.
The query layer serializes a bounded search clause into parameterized SQL and composes it with the same tenant, archive, filter, sort, and pagination rules used by ordinary row queries. PostgreSQL evaluates the maintained search vector and relevance rank inside the database, avoiding a client-side scan and keeping the lexical result set consistent across surfaces.
Selling Points
- Works without an embedding provider.
- Composes with filters, sorting, and pagination.
- Uses database indexes instead of client-side scans.
- Searches stored row text without sending content to an inference provider.
- Shares one ranked query contract across saved views and integrations.
User Story
As a researcher, I search a large Dotabase for exact language and narrow the results with structured filters. I submit a text clause with the relevant Dotabase query, add property filters, and page through ranked matches. The database applies tenant and archive boundaries before returning rows. I walk away with reproducible lexical results that can be automated or stored as view state rather than a browser-only search.
Extension Surface
Automatable: every query-capable surface can supply the same text-search clause.
packages/dotabases/src/query/text-search.ts is the programmatic extension surface: API, CLI, MCP, and UI compositions can provide the documented clause. The tokenizer, SQL serialization, and index semantics remain platform-defined.
Capabilities & Limits
- Capability: Executes the scoped workflow described above through the cited live implementation paths.
- Capability: Preserves typed validation and applicable tenant, schema, lifecycle, or service boundaries.
- Limit: Optimized for lexical relevance; meaning-based matches and RRF fusion belong to Semantic and Hybrid Row Search. The feature supports ranked title, body, and indexed-property lookup alongside filters, sorting, and pagination. It cannot find concepts that share no useful terms, search content excluded from the vector, or replace a semantic retriever. Relevance also follows PostgreSQL lexical configuration rather than a customer-trained ranking model.
Implementation Map
packages/dotabases/src/query/text-search.tspackages/dotabases/src/query/row-query.tspackages/db/src/schema/dotabases.ts