Bug 16838: ES - install mappings for new installs
authorJonathan Druart <jonathan.druart@bugs.koha-community.org>
Thu, 29 Sep 2016 09:18:27 +0000 (10:18 +0100)
committerBrendan Gallagher <brendan@bywatersolutions.com>
Tue, 11 Oct 2016 01:01:52 +0000 (01:01 +0000)
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 <nick@bywatersolutions.com>

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>

Signed-off-by: Brendan Gallagher <brendan@bywatersolutions.com>

Koha/ElasticSearch.pm
installer/data/mysql/updatedatabase.pl
installer/install.pl

index d56c344..ee6f227 100644 (file)
@@ -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 {
index cda1b02..48f91e5 100755 (executable)
@@ -12274,9 +12274,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')|);
@@ -12338,21 +12338,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);
index cc67557..f46229b 100755 (executable)
@@ -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' ) {