diff options
author | Haelwenn <contact+git.pleroma.social@hacktivis.me> | 2020-07-10 08:49:14 +0000 |
---|---|---|
committer | Haelwenn <contact+git.pleroma.social@hacktivis.me> | 2020-07-10 08:49:14 +0000 |
commit | 5ea638757210c34b40fb568e537082b78f4118a6 (patch) | |
tree | 6635ffb2117ec4765969484cb437d7f1f7ea1e79 /lib | |
parent | 8743df5193018238eff730447519300b271cd592 (diff) | |
parent | 123352ffa1c80aab658fca0c2276d1c06de43a02 (diff) | |
download | pleroma-5ea638757210c34b40fb568e537082b78f4118a6.tar.gz pleroma-5ea638757210c34b40fb568e537082b78f4118a6.zip |
Merge branch 'user-search-nickname-rank-boost' into 'develop'
Improved search results for localized nickname match
See merge request pleroma/pleroma!2733
Diffstat (limited to 'lib')
-rw-r--r-- | lib/pleroma/user/search.ex | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/lib/pleroma/user/search.ex b/lib/pleroma/user/search.ex index 42ff1de78..d4fd31069 100644 --- a/lib/pleroma/user/search.ex +++ b/lib/pleroma/user/search.ex @@ -69,11 +69,15 @@ defmodule Pleroma.User.Search do u in query, where: fragment( + # The fragment must _exactly_ match `users_fts_index`, otherwise the index won't work """ - (to_tsvector('simple', ?) || to_tsvector('simple', ?)) @@ to_tsquery('simple', ?) + ( + setweight(to_tsvector('simple', regexp_replace(?, '\\W', ' ', 'g')), 'A') || + setweight(to_tsvector('simple', regexp_replace(coalesce(?, ''), '\\W', ' ', 'g')), 'B') + ) @@ to_tsquery('simple', ?) """, - u.name, u.nickname, + u.name, ^query_string ) ) @@ -88,15 +92,23 @@ defmodule Pleroma.User.Search do |> Enum.join(" | ") end + # Considers nickname match, localized nickname match, name match; preferences nickname match defp trigram_rank(query, query_string) do from( u in query, select_merge: %{ search_rank: fragment( - "similarity(?, trim(? || ' ' || coalesce(?, '')))", + """ + similarity(?, ?) + + similarity(?, regexp_replace(?, '@.+', '')) + + similarity(?, trim(coalesce(?, ''))) + """, ^query_string, u.nickname, + ^query_string, + u.nickname, + ^query_string, u.name ) } |