X-Git-Url: http://git.squeep.com/?a=blobdiff_plain;f=lib%2Fpleroma%2Fuser.ex;h=6a8129ac84b2572432d80e2cd77d76b27cbdcd6b;hb=1afd6d37bd2febb58ee09d273b9c7d690022d3c3;hp=e9196ae0391b8b254008d1414b567e2da2265c38;hpb=9e0dd21ed637ec7b884570b2ad8705b5fac72580;p=akkoma diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index e9196ae03..6a8129ac8 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -21,6 +21,7 @@ defmodule Pleroma.User do field(:local, :boolean, default: true) field(:info, :map, default: %{}) field(:follower_address, :string) + field(:search_distance, :float, virtual: true) has_many(:notifications, Notification) timestamps() @@ -104,7 +105,7 @@ defmodule Pleroma.User do |> cast(params, [:bio, :name]) |> unique_constraint(:nickname) |> validate_format(:nickname, ~r/^[a-zA-Z\d]+$/) - |> validate_length(:bio, max: 1000) + |> validate_length(:bio, max: 5000) |> validate_length(:name, min: 1, max: 100) end @@ -399,16 +400,24 @@ defmodule Pleroma.User do User.get_or_fetch_by_nickname(query) end - q = + inner = from( u in User, - where: - fragment( - "(to_tsvector('english', ?) || to_tsvector('english', ?)) @@ plainto_tsquery('english', ?)", - u.nickname, - u.name, - ^query - ), + select_merge: %{ + search_distance: + fragment( + "? <-> (? || ?)", + ^query, + u.nickname, + u.name + ) + } + ) + + q = + from( + s in subquery(inner), + order_by: s.search_distance, limit: 20 )