Skip to content

v0.2.0

Choose a tag to compare

@er2es er2es released this 25 Sep 18:41
· 222 commits to main since this release

Breaking

  • OrmSyncListener takes a RefreshDispatcher instead of an Engine.

Added

  • Multi-tenancy: IndexDefinition::tenant / IndexBuilder::tenant() /
    #[Searchable(tenant:)] / YAML tenant: mark a filter as the tenant scope; every search on a
    tenant-scoped index must call ->forTenant() (InvalidQuery::missingTenant()) and every
    non-scoped index rejects one (InvalidQuery::unexpectedTenant()), enforced in the engine.
    Doctor gained a "Tenant scoping" check; exporters round-trip tenant.
  • Column-aware trigger filtering: a watched table's UPDATE only queues a refresh when a
    relevant column changed. Automatic for a table-sourced index's own watch; opt-in for joined
    watches via .watch(..., columns: [...]) / YAML columns:. Doctor gained a "Column-aware
    filtering" check that also validates explicit columns.
  • Configuration wizard: fuzzphony:wizard suggests a definition from table structure and
    planner statistics, explains every decision, exports YAML / builder / attributes, --try it.
  • Statement-level sync triggers (default) using transition tables. trigger_level: row keeps
    the previous behaviour; the doctor detects leftovers.
  • Per-query ranking overrides: ->ranking(['boost' => 0.1]), RankingProfile::with()/toArray().
  • Messenger: orm_sync.async dispatches RefreshDocuments messages.
  • API Platform FuzzphonySearchFilter, Live Component <twig:Fuzzphony:Search>.
  • Demo app (demo/): ILIKE comparison, playground, web wizard, benchmark, doctor.
  • Benchmarks: cold + warm timings, --markdown / --json, CI workflow with job summary.

Initial feature set

0.2.0 is the first tagged release. It also contains the initial feature set that was never tagged
on its own:

  • PostgreSQL engine: weighted full-text search, accent folding, stemming, trigram typo tolerance.
  • Index definitions via attributes, YAML or a fluent builder, validated with all violations at once.
  • Query language: AND/OR/NOT, phrases, prefixes, field scoping, grouping; never throws on user input.
  • Ranking profiles (text, fuzzy, exact/prefix bonus, boost, recency) with score breakdowns.
  • Thresholds: min score, fuzzy modes, similarity, candidate limit, input limits.
  • Sync modes: queue (default), trigger, ORM, manual; watches for joined tables.
  • Doctor with fixes; CLI commands for schema, reindex, worker, search and explain.

Full list: CHANGELOG