nseaSeb
Search_ash 0.5.0 - synonym support + memory leak fix
Just published search_ash 0.5.0 (with search_core 0.4.0) on Hex.
What’s new: synonyms
You can now declare a synonym dictionary per language:
elixir
synonyms %{en: %{"cat" => ["kitten"]}}
Typing cat now builds a tsquery like (cat | kitten), matching documents whose search_text contains either. A few things worth knowing:
- It’s dictionary-based, not semantic — the library doesn’t “know”
catandkittenare related, it applies exactly the mapping you give it. - It’s one-directional:
"cat" => ["kitten"]means typingcatalso findskitten, not the reverse — add both directions if you want symmetry. - Stemming still applies on both sides, so plurals/inflections are handled automatically.
- Synonyms only expand the full-text match + ranking (
search_text/ts_rank) — they deliberately don’t affect the global-search label ranking tiers or fuzzy/typo matching, so an exact title match still ranks first.
This turns out to be pretty handy for domain acronyms too ("bl" => ["bon de livraison"], etc.) — not just lexical synonyms.
What’s fixed: a memory leak
Also fixed a subtle memory retention issue related to how Elixir handles large binaries — a small referenced binary was keeping a much larger one alive longer than necessary. Fixed by forcing a copy at the right point in the pipeline instead of holding a sub-binary reference.
Feedback welcome, as always — especially on the synonym API shape if anyone has strong opinions on bidirectional-by-default vs explicit.
repo: https://github.com/nseaSeb/search_ash
Most Liked
vicb335
Popular in News & Updates
Other popular topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #websockets
- #supervisor
- #elixirconf-us
- #advent-of-code
- #distillery
- #processes
- #api
- #forms
- #metaprogramming
- #security
- #hex









