blob: 871b1d18589e11e697ebfcf61927e0bc9894313f (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
package FixMyStreet::Roles::FullTextSearch;
use Moo::Role;
use FixMyStreet;
requires 'text_search_columns';
requires 'text_search_nulls';
requires 'text_search_translate';
sub search_text {
my ($rs, $query) = @_;
my %nulls = map { $_ => 1 } $rs->text_search_nulls;
my @cols = map {
my $col = $rs->me($_);
$nulls{$_} ? "coalesce($col, '')" : $col;
} $rs->text_search_columns;
my $vector = join(" || ' ' || ", @cols);
my $bind = '?';
if (my $trans = $rs->text_search_translate) {
my $replace = ' ' x length $trans;
$vector = "translate($vector, '$trans', '$replace')";
$bind = "translate(?, '$trans', '$replace')";
}
my $config = FixMyStreet->config('DB_FULL_TEXT_SEARCH_CONFIG') || 'english';
$rs->search(\[ "to_tsvector('$config', $vector) @@ plainto_tsquery('$config', $bind)", $query ]);
}
1;
|