summaryrefslogtreecommitdiff
path: root/lib/VNWeb
diff options
context:
space:
mode:
authorYorhel <git@yorhel.nl>2021-11-24 11:06:28 +0100
committerYorhel <git@yorhel.nl>2021-11-24 11:06:28 +0100
commit289d6c6fed1c71308e4ae8843bf9fda29dd62836 (patch)
treed95e7491dcd5e0212027958fc6cca302e25668fb /lib/VNWeb
parent0df1ec1e68bdfa7e2b905eec06021e5666803e63 (diff)
Apply improved search to tags & traits as well
Diffstat (limited to 'lib/VNWeb')
-rw-r--r--lib/VNWeb/TT/Elm.pm10
-rw-r--r--lib/VNWeb/TT/List.pm3
2 files changed, 5 insertions, 8 deletions
diff --git a/lib/VNWeb/TT/Elm.pm b/lib/VNWeb/TT/Elm.pm
index 4ecc0a0a..3146ce23 100644
--- a/lib/VNWeb/TT/Elm.pm
+++ b/lib/VNWeb/TT/Elm.pm
@@ -10,9 +10,8 @@ elm_api Tags => undef, { search => {} }, sub {
'SELECT t.id, t.name, t.searchable, t.applicable, t.hidden, t.locked
FROM (',
sql_join('UNION ALL',
- $q =~ /^$RE{gid}$/ ? sql('SELECT 1, id FROM tags WHERE id =', \"$+{id}") : (),
- sql('SELECT 1+substr_score(lower(name),', \$qs, '), id FROM tags WHERE name ILIKE', \"%$qs%"),
- sql('SELECT 10+substr_score(lower(alias),', \$qs, '), id FROM tags WHERE alias ILIKE', \"%$qs%"),
+ $q =~ /^$RE{gid}$/ ? sql('SELECT 0, id FROM tags WHERE id =', \"$+{id}") : (),
+ sql('SELECT 1+substr_score(lower(name),', \$qs, '), id FROM tags WHERE c_search LIKE ALL(search_query(', \$q, '))'),
), ') x (prio, id)
JOIN tags t ON t.id = x.id
WHERE NOT (t.hidden AND t.locked)
@@ -30,9 +29,8 @@ elm_api Traits => undef, { search => {} }, sub {
'SELECT t.id, t.name, t.searchable, t.applicable, t.defaultspoil, t.hidden, t.locked, g.id AS group_id, g.name AS group_name
FROM (SELECT MIN(prio), id FROM (',
sql_join('UNION ALL',
- $q =~ /^$RE{iid}$/ ? sql('SELECT 1, id FROM traits WHERE id =', \"$+{id}") : (),
- sql('SELECT 1+substr_score(lower(name),', \$qs, '), id FROM traits WHERE name ILIKE', \"%$qs%"),
- sql('SELECT 10+substr_score(lower(alias),', \$qs, '), id FROM traits WHERE alias ILIKE', \"%$qs%"),
+ $q =~ /^$RE{iid}$/ ? sql('SELECT 0, id FROM traits WHERE id =', \"$+{id}") : (),
+ sql('SELECT 1+substr_score(lower(name),', \$qs, '), id FROM traits WHERE c_search LIKE ALL(search_query(', \$q, '))'),
), ') x(prio, id) GROUP BY id) x(prio,id)
JOIN traits t ON t.id = x.id
LEFT JOIN traits g ON g.id = t.group
diff --git a/lib/VNWeb/TT/List.pm b/lib/VNWeb/TT/List.pm
index 7c546ed4..b4bf2a36 100644
--- a/lib/VNWeb/TT/List.pm
+++ b/lib/VNWeb/TT/List.pm
@@ -49,14 +49,13 @@ TUWF::get qr{/(?<type>[gi])/list}, sub {
$opt->{s} = 'items' if $opt->{s} eq 'vns';
$opt->{t} = undef if $opt->{t} && $opt->{t} == -1; # for legacy URLs
- my $qs = $opt->{q} && '%'.sql_like($opt->{q}).'%';
my $where = sql_and
!defined $opt->{t} ? () :
$opt->{t} == 0 ? 'hidden AND NOT locked' :
$opt->{t} == 1 ? 'hidden AND locked' : 'NOT hidden',
defined $opt->{a} ? sql 'applicable =', \$opt->{a} : (),
defined $opt->{b} ? sql 'searchable =', \$opt->{b} : (),
- $opt->{q} ? sql 'name ILIKE', \$qs, 'OR alias ILIKE', \$qs : ();
+ $opt->{q} ? sql 'c_search LIKE ALL (search_query(', \$opt->{q}, '))' : ();
my $table = $type eq 'g' ? 'tags' : 'traits';
my $count = tuwf->dbVali("SELECT COUNT(*) FROM $table t WHERE", $where);