From 78a58175a5f60c3293e0bdbffe3364a6c06844a9 Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Thu, 29 Sep 2016 10:18:27 +0100 Subject: [PATCH] Bug 16838: ES - install mappings for new installs MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit The yaml file is not used to populate ES mapping tables (search_field, search_marc_map and search_marc_to_field) when doing a fresh install. We need to insert them, otherwise ES will be unusable. Test plan: Create a new install and confirm that the ES tables (search_field, search_marc_map and search_marc_to_field) are correctly populated. Bonus points: Use an older DB (prior to 3.23.00.050), execute the updatedatabase.pl script and confirm that the ES table are correctly populated Signed-off-by: Nick Clemens Signed-off-by: Kyle M Hall Signed-off-by: Brendan Gallagher (cherry picked from commit a36b6430195310b5198077dd50cdb436ef07ce37) Signed-off-by: Frédéric Demians --- Koha/ElasticSearch.pm | 21 +++++++++++++++++++++ installer/data/mysql/updatedatabase.pl | 19 +++---------------- installer/install.pl | 2 ++ 3 files changed, 26 insertions(+), 16 deletions(-) diff --git a/Koha/ElasticSearch.pm b/Koha/ElasticSearch.pm index d56c344c8a..ee6f2272e3 100644 --- a/Koha/ElasticSearch.pm +++ b/Koha/ElasticSearch.pm @@ -22,11 +22,14 @@ use base qw(Class::Accessor); use C4::Context; use Koha::Database; +use Koha::SearchFields; +use Koha::SearchMarcMaps; use Carp; use JSON; use Modern::Perl; use Readonly; +use YAML::Syck; use Data::Dumper; # TODO remove @@ -250,6 +253,24 @@ sub get_elasticsearch_mappings { return $mappings; } +sub reset_elasticsearch_mappings { + my $mappings_yaml = C4::Context->config('intranetdir') . '/admin/searchengine/elasticsearch/mappings.yaml'; + my $indexes = LoadFile( $mappings_yaml ); + + while ( my ( $index_name, $fields ) = each %$indexes ) { + while ( my ( $field_name, $data ) = each %$fields ) { + my $field_type = $data->{type}; + my $field_label = $data->{label}; + my $mappings = $data->{mappings}; + my $search_field = Koha::SearchFields->find_or_create({ name => $field_name, label => $field_label, type => $field_type }, { key => 'name' }); + for my $mapping ( @$mappings ) { + my $marc_field = Koha::SearchMarcMaps->find_or_create({ index_name => $index_name, marc_type => $mapping->{marc_type}, marc_field => $mapping->{marc_field} }); + $search_field->add_to_search_marc_maps($marc_field, { facet => $mapping->{facet}, suggestible => $mapping->{suggestible}, sort => $mapping->{sort} } ); + } + } + } +} + # This overrides the accessor provided by Class::Accessor so that if # sort_fields isn't set, then it'll generate it. sub sort_fields { diff --git a/installer/data/mysql/updatedatabase.pl b/installer/data/mysql/updatedatabase.pl index 86232d4601..a2574b9647 100755 --- a/installer/data/mysql/updatedatabase.pl +++ b/installer/data/mysql/updatedatabase.pl @@ -12270,9 +12270,9 @@ if ( $column_has_been_used ) { $DBversion = "3.23.00.050"; if ( CheckVersion($DBversion) ) { - use YAML::Syck; use Koha::SearchMarcMaps; use Koha::SearchFields; + use Koha::ElasticSearch; $dbh->do(q|INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES('SearchEngine','Zebra','Choose Search Engine','','Choice')|); @@ -12334,21 +12334,8 @@ $dbh->do(q| ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci |); -my $mappings_yaml = C4::Context->config('intranetdir') . '/admin/searchengine/elasticsearch/mappings.yaml'; -my $indexes = LoadFile( $mappings_yaml ); - -while ( my ( $index_name, $fields ) = each %$indexes ) { - while ( my ( $field_name, $data ) = each %$fields ) { - my $field_type = $data->{type}; - my $field_label = $data->{label}; - my $mappings = $data->{mappings}; - my $search_field = Koha::SearchFields->find_or_create({ name => $field_name, label => $field_label, type => $field_type }, { key => 'name' }); - for my $mapping ( @$mappings ) { - my $marc_field = Koha::SearchMarcMaps->find_or_create({ index_name => $index_name, marc_type => $mapping->{marc_type}, marc_field => $mapping->{marc_field} }); - $search_field->add_to_search_marc_maps($marc_field, { facet => $mapping->{facet}, suggestible => $mapping->{suggestible}, sort => $mapping->{sort} } ); - } - } -} + # Insert default mappings + Koha::ElasticSearch->reset_elasticsearch_mappings; print "Upgrade to $DBversion done (Bug 12478 - Elasticsearch support for Koha)\n"; SetVersion($DBversion); diff --git a/installer/install.pl b/installer/install.pl index cc67557ccc..f46229b730 100755 --- a/installer/install.pl +++ b/installer/install.pl @@ -209,6 +209,8 @@ elsif ( $step && $step == 3 ) { "fwklanguage" => $fwk_language, "list" => $list ); + use Koha::ElasticSearch; + Koha::ElasticSearch->reset_elasticsearch_mappings; $template->param( "$op" => 1 ); } elsif ( $op && $op eq 'selectframeworks' ) { -- 2.39.5