fts_results = do_search(fts_search_subquery(query), for_user)
- trigram_results = do_search(trigram_search_subquery(query), for_user)
+ {:ok, trigram_results} =
+ Repo.transaction(fn ->
+ Ecto.Adapters.SQL.query(Repo, "select set_limit(0.25)", [])
+ do_search(trigram_search_subquery(query), for_user)
+ end)
Enum.uniq_by(fts_results ++ trigram_results, & &1.id)
end
^processed_query
)
},
- where: not is_nil(u.nickname)
+ where:
+ fragment(
+ """
+ (setweight(to_tsvector('simple', regexp_replace(?, '\\W', ' ', 'g')), 'A') ||
+ setweight(to_tsvector('simple', regexp_replace(coalesce(?, ''), '\\W', ' ', 'g')), 'B')) @@ to_tsquery('simple', ?)
+ """,
+ u.nickname,
+ u.name,
+ ^processed_query
+ )
)
end
u.name
)
},
- where: not is_nil(u.nickname)
+ where: fragment("trim(? || ' ' || coalesce(?, '')) % ?", u.nickname, u.name, ^query)
)
end