1 package Koha::SearchEngine::Solr::Search;
3 with 'Koha::SearchEngine::SearchRole';
5 use Data::Dump qw(dump);
8 use Data::SearchEngine::Solr;
10 use Data::SearchEngine::Query;
11 use Koha::SearchEngine::Solr;
15 isa => 'Koha::SearchEngine::Solr',
16 default => sub { Koha::SearchEngine::Solr->new },
21 my ( $self, $q, $filters, $params ) = @_;
25 my $page = defined $params->{page} ? $params->{page} : 1;
26 my $count = defined $params->{count} ? $params->{count} : 999999999;
27 my $sort = defined $params->{sort} ? $params->{sort} : 'score desc';
28 my $facets = defined $params->{facets} ? $params->{facets} : 0;
30 # Construct fl from $params->{fl}
31 # If "recordid" or "id" not exist, we push them
36 grep ( /^recordid$/, @{$params->{fl}} ) ? () : "recordid",
37 grep ( /^id$/, @{$params->{fl}} ) ? () : "id"
39 : ( "recordid", "id" );
41 my $recordtype = ref($filters->{recordtype}) eq 'ARRAY'
42 ? $filters->{recordtype}[0]
43 : $filters->{recordtype}
44 if defined $filters && defined $filters->{recordtype};
47 $self->searchengine->options->{"facet"} = 'true';
48 $self->searchengine->options->{"facet.mincount"} = 1;
49 $self->searchengine->options->{"facet.limit"} = 10; # TODO create a new systempreference C4::Context->preference("numFacetsDisplay")
50 my @facetable_indexes = map { 'str_' . $_->{code} } @{$self->searchengine->config->facetable_indexes};
51 $self->searchengine->options->{"facet.field"} = \@facetable_indexes;
53 $self->searchengine->options->{sort} = $sort;
54 $self->searchengine->options->{fl} = $fl;
57 $self->searchengine->options->{fq} = [
60 ref($filters->{$idx}) eq 'ARRAY'
66 utf8::decode($filter_str);
67 my $quotes_existed = ( $filter_str =~ m/^".*"$/ );
68 $filter_str =~ s/^"(.*)"$/$1/; #remove quote around value if exist
69 $filter_str =~ s/[^\\]\K"/\\"/g;
70 $filter_str = qq{"$filter_str"} # Add quote around value if not exist
71 if not $filter_str =~ /^".*"$/
74 } @{ $filters->{$idx} } )
76 : "$idx:$filters->{$idx}";
80 my $sq = Data::SearchEngine::Query->new(
87 my $results = eval { $self->searchengine->search( $sq ) };
93 $err =~ s#^[^\n]*\n##; # Delete first line
94 if ( $err =~ "400 URL must be absolute" ) {
95 $err = "Your system preference 'SolrAPI' is not set correctly";
97 elsif ( not $err =~ 'Connection refused' ) {
98 my $document = XMLin( $err );
99 $err = "$$document{body}{h2} : $$document{body}{pre}";
101 $results->{error} = $err;