From ed69330478cb627ed89776b8b9849a59c3fffcf7 Mon Sep 17 00:00:00 2001 From: Nick Clemens Date: Wed, 5 Jul 2017 12:11:35 +0000 Subject: [PATCH] Bug 18213 - Add language facets to Elasticsearch This patch add language as a facet to ES results - it adds a new template plugin for languages to get the appropriate description given an iso 639-2 code To test: 1 - Make sure you have records with differing languages (in the MARC21 008 field characters 35-37 or UNIMARC 101a) 2 - Apply patch 3 - Reload Elasticsearch settings: http://localhost:8081/cgi-bin/koha/admin/searchengine/elasticsearch/mappings.pl?op=reset&i_know_what_i_am_doing=1 4 - Reindex your records 5 - Search for a phrase that will return results in several languages 6 - Verify you see factes correctly labelled for 'Language' 7 - Verify the facets work 8 - Verify both opac and staff results 9 - prove t/db_dependent/Languages.t --- C4/Languages.pm | 14 ++++++++++++++ Koha/SearchEngine/Elasticsearch.pm | 3 +-- Koha/SearchEngine/Elasticsearch/QueryBuilder.pm | 1 + Koha/SearchEngine/Elasticsearch/Search.pm | 1 + admin/searchengine/elasticsearch/mappings.yaml | 7 ++++--- koha-tmpl/intranet-tmpl/prog/en/includes/facets.inc | 5 ++++- .../modules/admin/searchengine/elasticsearch/mappings.tt | 1 + koha-tmpl/opac-tmpl/bootstrap/en/includes/opac-facets.inc | 5 ++++- t/db_dependent/Languages.t | 8 +++++++- 9 files changed, 37 insertions(+), 8 deletions(-) diff --git a/C4/Languages.pm b/C4/Languages.pm index 5e4dabd..dc97cd5 100644 --- a/C4/Languages.pm +++ b/C4/Languages.pm @@ -612,6 +612,20 @@ sub getlanguage { return $language; } +=head2 get_rfc4646_from_iso639 + + Select a language rfc4646 code given an iso639 code + +=cut + +sub get_rfc4646_from_iso639 { + + my $iso_code = shift; + my $rfc_subtag = Koha::Database->new()->schema->resultset('LanguageRfc4646ToIso639')->find({iso639_2_code=>$iso_code})->rfc4646_subtag; + return $rfc_subtag; + +} + 1; __END__ diff --git a/Koha/SearchEngine/Elasticsearch.pm b/Koha/SearchEngine/Elasticsearch.pm index f0aa1f6..44005ea 100644 --- a/Koha/SearchEngine/Elasticsearch.pm +++ b/Koha/SearchEngine/Elasticsearch.pm @@ -486,7 +486,6 @@ sub process_error { return "Unable to perform your search. Please try again.\n"; } -<<<<<<< HEAD =head2 _read_configuration my $conf = _read_configuration(); @@ -550,7 +549,7 @@ sub get_facetable_fields { # These should correspond to the ES field names, as opposed to the CCL # things that zebra uses. - my @search_field_names = qw( author itype location su-geo se subject ccode holdingbranch homebranch ); + my @search_field_names = qw( author itype location su-geo se subject ccode holdingbranch homebranch ln); my @faceted_fields = Koha::SearchFields->search( { name => { -in => \@search_field_names }, facet_order => { '!=' => undef } }, { order_by => ['facet_order'] } ); diff --git a/Koha/SearchEngine/Elasticsearch/QueryBuilder.pm b/Koha/SearchEngine/Elasticsearch/QueryBuilder.pm index 95cc86a..0c689ac 100644 --- a/Koha/SearchEngine/Elasticsearch/QueryBuilder.pm +++ b/Koha/SearchEngine/Elasticsearch/QueryBuilder.pm @@ -119,6 +119,7 @@ sub build_query { 'su-geo' => { terms => { field => "su-geo__facet" } }, se => { terms => { field => "se__facet" } }, ccode => { terms => { field => "ccode__facet" } }, + ln => { terms => { field => "ln__facet" } }, }; my $display_library_facets = C4::Context->preference('DisplayLibraryFacets'); diff --git a/Koha/SearchEngine/Elasticsearch/Search.pm b/Koha/SearchEngine/Elasticsearch/Search.pm index c29e421..8cd3619 100644 --- a/Koha/SearchEngine/Elasticsearch/Search.pm +++ b/Koha/SearchEngine/Elasticsearch/Search.pm @@ -434,6 +434,7 @@ sub _convert_facets { ccode => 'CollectionCodes', holdingbranch => 'HoldingLibrary', homebranch => 'HomeLibrary', + ln => 'Language', ); my @facetable_fields = Koha::SearchEngine::Elasticsearch->get_facetable_fields; diff --git a/admin/searchengine/elasticsearch/mappings.yaml b/admin/searchengine/elasticsearch/mappings.yaml index 0b35055..0593366 100644 --- a/admin/searchengine/elasticsearch/mappings.yaml +++ b/admin/searchengine/elasticsearch/mappings.yaml @@ -1720,22 +1720,23 @@ biblios: ln: label: ln mappings: - - facet: '' + - facet: '1' marc_field: 008_/35-37 marc_type: marc21 sort: ~ suggestible: '' - - facet: '' + - facet: '1' marc_field: 008_/35-37 marc_type: normarc sort: ~ suggestible: '' - - facet: '' + - facet: '1' marc_field: 101a marc_type: unimarc sort: ~ suggestible: '' type: '' + facet_order: 10 local-classification: label: local-classification mappings: diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/facets.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/facets.inc index 572be95..9abeef7 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/includes/facets.inc +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/facets.inc @@ -1,4 +1,5 @@ [% USE AuthorisedValues %] +[% USE Languages %] [% IF ( opacfacets ) %] [% IF ( facets_loop ) %]
@@ -21,7 +22,8 @@ [% IF ( facets_loo.type_label_HomeLibrary ) %]Home libraries[% END %] [% IF ( facets_loo.type_label_HoldingLibrary ) %]Holding libraries[% END %] [% IF facets_loo.type_label_Location %]Locations[% END %] -[% IF facets_loo.type_label_CollectionCodes %]Collections[% END %] +[% IF facets_loo.type_label_CollectionCodes %]Collections[% END %] +[% IF facets_loo.type_label_Language %]Languages[% END %]