Decisions
Why this package works the way it does. Each record states the problem as it stood, what was chosen, and what that choice costs — the last part being the one worth reading before you file a bug about it.
Record 0 is the one the package exists to serve; the rest are choices made underneath it.
| # | Decision | Costs you |
|---|---|---|
| 0 | Why this exists: cheap, simple indexing for Scout on SQLite | Narrow scope by design |
| 1 | Build on SQLite FTS5 rather than a portable index | Runs on SQLite only |
| 2 | Derive index tables from models, not migrations | Schema changes need a rebuild |
| 3 | Store integer keys in rowid | String-keyed models scan on write |
| 4 | Answer a query with a cascade of passes | A query that finds nothing runs all four |
| 5 | Require a share of one word’s substrings | A threshold to tune, not a universal answer |
| 6 | Order, filter and paginate in SQL | The index must share a connection with the models |
| 7 | Quote every word as an FTS5 phrase | Users cannot write FTS5 query syntax |
| 8 | Throw on a filter that matches no column | A typo breaks the request instead of quietly narrowing it |
| 9 | Test through a booted Laravel application | The full framework is a dev dependency |