diff options
author | rinpatch <rinpatch@sdf.org> | 2019-03-22 08:39:49 +0300 |
---|---|---|
committer | rinpatch <rinpatch@sdf.org> | 2019-03-22 08:39:49 +0300 |
commit | 3229c7a1d689802f21a6efe648fcc56b8def3aa0 (patch) | |
tree | f739abd8de13ea00bfc2db08166d998b5c5b9fcc /lib | |
parent | 519a294d0ff168f1b5c069373690ffe528780a2f (diff) | |
download | pleroma-3229c7a1d689802f21a6efe648fcc56b8def3aa0.tar.gz |
Ensure fts is prefered over trigram and use union_all instead of union in user search query
Diffstat (limited to 'lib')
-rw-r--r-- | lib/pleroma/user.ex | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index e16141edc..f2ef0a838 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -50,6 +50,7 @@ defmodule Pleroma.User do field(:local, :boolean, default: true) field(:follower_address, :string) field(:search_rank, :float, virtual: true) + field(:search_type, :integer, virtual: true) field(:tags, {:array, :string}, default: []) field(:bookmarks, {:array, :string}, default: []) field(:last_refreshed_at, :naive_datetime_usec) @@ -835,8 +836,8 @@ defmodule Pleroma.User do def search_query(query, for_user) do fts_subquery = fts_search_subquery(query) trigram_subquery = trigram_search_subquery(query) - union_query = from(s in trigram_subquery, union: ^fts_subquery) - distinct_query = from(s in subquery(union_query), distinct: s.id) + union_query = from(s in trigram_subquery, union_all: ^fts_subquery) + distinct_query = from(s in subquery(union_query), order_by: s.search_type, distinct: s.id) from(s in subquery(boost_search_rank_query(distinct_query, for_user)), order_by: [desc: s.search_rank], @@ -884,6 +885,7 @@ defmodule Pleroma.User do from( u in query, select_merge: %{ + search_type: ^0, search_rank: fragment( """ @@ -916,6 +918,8 @@ defmodule Pleroma.User do from( u in User, select_merge: %{ + # ^1 gives 'Postgrex expected a binary, got 1' for some weird reason + search_type: fragment("?", 1), search_rank: fragment( "similarity(?, trim(? || ' ' || coalesce(?, '')))", |