%Scrypath.Query{} is internal normalized query state produced by the common search
path before a backend sees it. It is not a semver-stable pattern-match target for
application code—callers should build options as keywords for Scrypath.search/3 and treat
this struct as an implementation detail behind Scrypath.Meilisearch.Query (or other
adapters).
Summary
Types
Per-attribute facet bucket filters (facet_filter: keyword).
Facet attribute names requested on the query.
Meilisearch filter list after normalization (keyword of attribute predicates).
Normalized pagination: :number is the 1-based page index, :size is the page size cap.
Meilisearch sort list after normalization ([{attribute, direction}]).
Internal query bundle: full-text string plus normalized filter, sort, facet, and per-query
slices. Field shapes mirror allowlisted Scrypath.search/3 options after validation.
Types
@type facet_filter_t() :: keyword()
Per-attribute facet bucket filters (facet_filter: keyword).
@type facets_t() :: [atom()]
Facet attribute names requested on the query.
@type filter_t() :: keyword()
Meilisearch filter list after normalization (keyword of attribute predicates).
@type page_t() :: %{ optional(:number) => pos_integer(), optional(:size) => pos_integer() }
Normalized pagination: :number is the 1-based page index, :size is the page size cap.
@type sort_t() :: keyword()
Meilisearch sort list after normalization ([{attribute, direction}]).
@type t() :: %Scrypath.Query{ facet_filter: facet_filter_t(), facets: facets_t(), filter: filter_t(), page: page_t(), per_query: map(), sort: sort_t(), text: String.t() }
Internal query bundle: full-text string plus normalized filter, sort, facet, and per-query
slices. Field shapes mirror allowlisted Scrypath.search/3 options after validation.