aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorrinpatch <rinpatch@sdf.org>2019-03-22 08:39:49 +0300
committerrinpatch <rinpatch@sdf.org>2019-03-22 08:39:49 +0300
commit3229c7a1d689802f21a6efe648fcc56b8def3aa0 (patch)
treef739abd8de13ea00bfc2db08166d998b5c5b9fcc /lib
parent519a294d0ff168f1b5c069373690ffe528780a2f (diff)
downloadpleroma-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.ex8
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(?, '')))",