aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlain <lain@soykaf.club>2019-01-20 00:31:17 +0100
committerlain <lain@soykaf.club>2019-01-20 00:31:17 +0100
commitb108aeee082949e2e534f8bc406fdacb8924803d (patch)
tree3e389825a1b4d941cda0c2f7dda538f11f865729
parent79e44042bc08cf69274008e408cac912ae693afe (diff)
downloadpleroma-b108aeee082949e2e534f8bc406fdacb8924803d.tar.gz
Make use of the indices.
Indices in postgresql rely on operators, so they won't be used if you use only functions.
-rw-r--r--lib/pleroma/user.ex13
-rw-r--r--priv/repo/migrations/20190118074940_fix_user_trigram_index.exs17
2 files changed, 24 insertions, 6 deletions
diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex
index eb4218ebe..87815e11c 100644
--- a/lib/pleroma/user.ex
+++ b/lib/pleroma/user.ex
@@ -734,7 +734,16 @@ defmodule Pleroma.User do
^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
@@ -750,7 +759,7 @@ defmodule Pleroma.User do
u.name
)
},
- where: not is_nil(u.nickname)
+ where: fragment("trim(? || ' ' || coalesce(?, '')) % ?", u.nickname, u.name, ^query)
)
end
diff --git a/priv/repo/migrations/20190118074940_fix_user_trigram_index.exs b/priv/repo/migrations/20190118074940_fix_user_trigram_index.exs
index 4f7712eb0..b4e8c984c 100644
--- a/priv/repo/migrations/20190118074940_fix_user_trigram_index.exs
+++ b/priv/repo/migrations/20190118074940_fix_user_trigram_index.exs
@@ -2,12 +2,21 @@ defmodule Pleroma.Repo.Migrations.FixUserTrigramIndex do
use Ecto.Migration
def up do
- drop_if_exists index(:users, [], name: :users_trigram_index)
- create index(:users, ["(trim(nickname || ' ' || name)) gist_trgm_ops"], name: :users_trigram_index, using: :gist)
+ drop_if_exists(index(:users, [], name: :users_trigram_index))
+
+ create(
+ index(:users, ["(trim(nickname || ' ' || coalesce(name, ''))) gist_trgm_ops"],
+ name: :users_trigram_index,
+ using: :gist
+ )
+ )
end
def down do
- drop_if_exists index(:users, [], name: :users_trigram_index)
- create index(:users, ["(nickname || name) gist_trgm_ops"], name: :users_trigram_index, using: :gist)
+ drop_if_exists(index(:users, [], name: :users_trigram_index))
+
+ create(
+ index(:users, ["(nickname || name) gist_trgm_ops"], name: :users_trigram_index, using: :gist)
+ )
end
end