1 package OpenILS::Application::Storage::Publisher::metabib;
2 use base qw/OpenILS::Application::Storage/;
4 use OpenSRF::EX qw/:try/;
5 use OpenILS::Application::Storage::CDBI::metabib;
6 use OpenILS::Application::Storage::FTS;
7 use OpenILS::Utils::Fieldmapper;
8 use OpenSRF::Utils::Logger;
10 my $log = 'OpenSRF::Utils::Logger';
21 my ($fts_col) = metabib::full_rec->columns('FTS');
22 my $table = metabib::full_rec->table;
24 my $fts = OpenILS::Application::Storage::FTS->compile($term);
26 my $fts_where = $fts->sql_where_clause($fts_col);
27 my @fts_ranks = $fts->fts_rank;
29 my $rank = join(' + ', @fts_ranks);
33 for my $limit (@$limiters) {
34 push @wheres, "( tag = ? AND subfield LIKE ? AND $fts_where )";
35 push @binds, $$limit{tag}, $$limit{subfield};
36 $log->debug("Limiting query using { tag => $$limit{tag}, subfield => $$limit{subfield} }", DEBUG);
38 my $where = join(' OR ', @wheres);
40 my $select = "SELECT record, sum($rank) FROM $table WHERE $where GROUP BY 1 ORDER BY 2 DESC;";
42 $log->debug("Search SQL :: [$select]",DEBUG);
44 my $recs = metabib::full_rec->db_Main->selectall_arrayref($select, {}, @binds);
45 $log->debug("Search yielded ".scalar(@$recs)." results.",DEBUG);
49 __PACKAGE__->register_method(
50 api_name => 'open-ils.storage.metabib.full_rec.search.fts',
51 method => 'search_full_rec',