@@ -, +, @@ - On master, do a search that returns biblios with items having - Apply the patch - Restart memcached and plack (just in case, it was tricky) - Reset your mappings: http://localhost:8081/cgi-bin/koha/admin/searchengine/elasticsearch/mappings.pl?op=reset&i_know_what_i_am_doing=1 - Restart memcached and plack (again, not sure if needed) - Make sure this mappings are set: homebranch => HomeLibrary holdingbranch => HoldingLibrary (Note: it might not be set due to the place the yaml file is being picked) - Reindex your records: $ sudo koha-shell kohadev k$ cd kohaclone k$ perl misc/search_tools/rebuild_elastic_search.pl -d -v - Repeat the initial search - Run k$ prove t/db_dependent/Koha_SearchEngine_Elasticsearch_Search.t - Sign off :-D --- Koha/SearchEngine/Elasticsearch/QueryBuilder.pm | 12 +++++++++- Koha/SearchEngine/Elasticsearch/Search.pm | 6 +++++ admin/searchengine/elasticsearch/mappings.yaml | 27 ++++++++++++++++++---- .../Koha_SearchEngine_Elasticsearch_Search.t | 26 ++++++++++++++++++++- 4 files changed, 65 insertions(+), 6 deletions(-) --- a/Koha/SearchEngine/Elasticsearch/QueryBuilder.pm +++ a/Koha/SearchEngine/Elasticsearch/QueryBuilder.pm @@ -115,10 +115,20 @@ sub build_query { author => { terms => { field => "author__facet" } }, subject => { terms => { field => "subject__facet" } }, itype => { terms => { field => "itype__facet" } }, - location => { terms => { field => "homebranch__facet" } }, + location => { terms => { field => "location__facet" } }, 'su-geo' => { terms => { field => "su-geo__facet" } }, se => { terms => { field => "se__facet" } }, }; + + my $display_library_facets = C4::Context->preference('DisplayLibraryFacets'); + if ( $display_library_facets eq 'both' + or $display_library_facets eq 'home' ) { + $res->{aggregations}{homebranch} = { terms => { field => "homebranch__facet" } }; + } + if ( $display_library_facets eq 'both' + or $display_library_facets eq 'holding' ) { + $res->{aggregations}{holdingbranch} = { terms => { field => "holdingbranch__facet" } }; + } if ( my $ef = $options{expanded_facet} ) { $res->{aggregations}{$ef}{terms}{size} = C4::Context->preference('FacetMaxCount'); }; --- a/Koha/SearchEngine/Elasticsearch/Search.pm +++ a/Koha/SearchEngine/Elasticsearch/Search.pm @@ -408,16 +408,22 @@ sub _convert_facets { 'su-geo' => { order => 4, label => 'Places', }, se => { order => 5, label => 'Series', }, subject => { order => 6, label => 'Topics', }, + holdingbranch => { order => 8, label => 'HoldingLibrary' }, + homebranch => { order => 9, label => 'HomeLibrary' } ); # We also have some special cases, e.g. itypes that need to show the # value rather than the code. my @itypes = Koha::ItemTypes->search; + my @libraries = Koha::Libraries->search; + my $library_names = { map { $_->branchcode => $_->branchname } @libraries }; my @locations = Koha::AuthorisedValues->search( { category => 'LOC' } ); my $opac = C4::Context->interface eq 'opac' ; my %special = ( itype => { map { $_->itemtype => $_->description } @itypes }, location => { map { $_->authorised_value => ( $opac ? ( $_->lib_opac || $_->lib ) : $_->lib ) } @locations }, + holdingbranch => $library_names, + homebranch => $library_names ); my @facets; $exp_facet //= ''; --- a/admin/searchengine/elasticsearch/mappings.yaml +++ a/admin/searchengine/elasticsearch/mappings.yaml @@ -1425,14 +1425,14 @@ biblios: suggestible: '' type: '' holdingbranch: - label: holdingbranch + label: HoldingLibrary mappings: - - facet: '' + - facet: '1' marc_field: 952b marc_type: marc21 sort: ~ suggestible: '' - - facet: '' + - facet: '1' marc_field: 952b marc_type: normarc sort: ~ @@ -1444,7 +1444,7 @@ biblios: suggestible: '' type: string homebranch: - label: homebranch + label: HomeLibrary mappings: - facet: '1' marc_field: 952a @@ -1736,6 +1736,25 @@ biblios: sort: ~ suggestible: '1' type: '' + location: + label: Location + mappings: + - facet: '1' + marc_field: 952c + marc_type: marc21 + sort: ~ + suggestible: '' + - facet: '1' + marc_field: 952c + marc_type: normarc + sort: ~ + suggestible: '' + - facet: '1' + marc_field: 995e + marc_type: unimarc + sort: ~ + suggestible: '' + type: '' material-type: label: material-type mappings: --- a/t/db_dependent/Koha_SearchEngine_Elasticsearch_Search.t +++ a/t/db_dependent/Koha_SearchEngine_Elasticsearch_Search.t @@ -17,7 +17,8 @@ use Modern::Perl; -use Test::More tests => 11; +use Test::More tests => 12; +use t::lib::Mocks; use Koha::SearchEngine::Elasticsearch::QueryBuilder; @@ -79,4 +80,27 @@ subtest 'json2marc' => sub { }; +subtest 'build_query tests' => sub { + plan tests => 6; + + t::lib::Mocks::mock_preference('DisplayLibraryFacets','both'); + my $query = $builder->build_query(); + ok( defined $query->{aggregations}{homebranch}, + 'homebranch added to facets if DisplayLibraryFacets=both' ); + ok( defined $query->{aggregations}{holdingbranch}, + 'holdingbranch added to facets if DisplayLibraryFacets=both' ); + t::lib::Mocks::mock_preference('DisplayLibraryFacets','holding'); + $query = $builder->build_query(); + ok( !defined $query->{aggregations}{homebranch}, + 'homebranch not added to facets if DisplayLibraryFacets=holding' ); + ok( defined $query->{aggregations}{holdingbranch}, + 'holdingbranch added to facets if DisplayLibraryFacets=holding' ); + t::lib::Mocks::mock_preference('DisplayLibraryFacets','home'); + $query = $builder->build_query(); + ok( defined $query->{aggregations}{homebranch}, + 'homebranch added to facets if DisplayLibraryFacets=home' ); + ok( !defined $query->{aggregations}{holdingbranch}, + 'holdingbranch not added to facets if DisplayLibraryFacets=home' ); +}; + 1; --