1 package OpenILS::Application::Search;
2 use OpenILS::Application;
3 use base qw/OpenILS::Application/;
4 use strict; use warnings;
5 use OpenSRF::Utils::JSON;
6 use OpenSRF::Utils::Logger qw(:logger);
8 use OpenILS::Utils::Fieldmapper;
9 use OpenILS::Utils::ModsParser;
10 use OpenSRF::Utils::SettingsClient;
11 use OpenSRF::Utils::Cache;
13 use OpenILS::Application::Search::Biblio;
14 use OpenILS::Application::Search::Authority;
15 use OpenILS::Application::Search::Z3950;
16 use OpenILS::Application::Search::Zips;
17 use OpenILS::Application::Search::CNBrowse;
18 use OpenILS::Application::Search::Serial;
21 use OpenILS::Application::AppUtils;
23 use Time::HiRes qw(time);
24 use OpenSRF::EX qw(:try);
28 # Houses generic search utilites
31 OpenILS::Application::Search::Z3950->initialize();
32 OpenILS::Application::Search::Zips->initialize();
33 OpenILS::Application::Search::Biblio->initialize();
38 # ------------------------------------------------------------------
39 # Create custom dictionaries like so:
40 # aspell --lang=en create master ./oils_authority.dict < /tmp/words
41 # where /tmp/words is a space separated list of words
42 # ------------------------------------------------------------------
44 __PACKAGE__->register_method(
45 method => "spellcheck",
46 api_name => "open-ils.search.spellcheck");
48 my $speller = Text::Aspell->new();
51 my( $self, $client, $phrase ) = @_;
53 my $conf = OpenSRF::Utils::SettingsClient->new;
55 if( my $dict = $conf->config_value(
56 "apps", "open-ils.search", "app_settings", "spelling_dictionary")) {
57 $speller->set_option('master', $dict);
58 $logger->debug("spelling dictionary set to $dict");
62 return \@resp unless $phrase;
63 for my $word (split(/\s+/,$phrase) ) {
67 suggestions => ($speller->check($word)) ? undef : [$speller->suggest($word)]