Compare commits

...

3 Commits

Author SHA1 Message Date
Pierre Ducroquet d40f540a00 favor a perfect match
gitea/wcs/pipeline/head There was a failure building this commit Details
2024-02-28 17:38:11 +01:00
Pierre Ducroquet 311a3b403e crude id and phone protection 2024-02-28 17:38:11 +01:00
Pierre Ducroquet a65955161e fix migration 2024-02-28 17:38:11 +01:00
1 changed files with 9 additions and 2 deletions

View File

@ -1579,7 +1579,7 @@ def do_global_views(conn, cur):
% (name, category.id)
)
init_search_tokens_triggers(cur)
init_search_tokens(cur)
def clean_global_views(conn, cur):
@ -1703,6 +1703,7 @@ def init_search_tokens(conn=None, cur=None):
init_search_tokens_data(cur)
# Index at the end, small performance trick... not that useful, but it's free...
cur.execute("CREATE EXTENSION IF NOT EXISTS pg_trgm;")
cur.execute("CREATE INDEX IF NOT EXISTS wcs_search_tokens_trgm ON wcs_search_tokens USING gin(token gin_trgm_ops);")
# And last: functions to use this brand new table
@ -1715,7 +1716,13 @@ def init_search_tokens(conn=None, cur=None):
AS $function$
with
tokenized as (select unnest(regexp_split_to_array($1, '\s+')) w),
super_tokenized as (select w, coalesce(tsquery_agg_or(plainto_tsquery(token) order by token <-> w desc), plainto_tsquery(w)) tokens from tokenized left join wcs_search_tokens on token % w group by w)
super_tokenized as (
select w,
coalesce(perfect.token, tsquery_agg_or(plainto_tsquery(token) order by token <-> w desc), plainto_tsquery(w)) tokens
from tokenized
left join wcs_search_tokens perfect on token = plainto_tsquery(w)
left join wcs_search_tokens on token % w and w not similar to '%[0-9]{2,}%'
group by w)
select tsquery_agg_and(tokens) from super_tokenized;
$function$;""")