Multilingual full-text search building blocks for plain Elixir/Ecto — no Ash required.
Two responsibilities:
SearchCore.Pipeline— turn raw text into normalized, stemmed tokens (via theStemmersRust NIF, French and the full Snowball set included).SearchCore.Tsvector— turn those tokens into thesearch_textyou index and thetsqueryyou search with, both from the same pipeline so index and query never drift apart.
This module is a thin facade over those two. See SearchCore.Tsvector for the
Postgres wiring (to_tsvector('simple', …) / to_tsquery('simple', …)).
iex> SearchCore.searchable_text("Les chevaux mangent", :french)
"cheval mangent"
iex> SearchCore.tsquery("chevaux", :french)
"cheval"