Bug 16838: ES - install mappings for new installs

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>
This commit is contained in:
Jonathan Druart 2016-09-29 10:18:27 +01:00 committed by Brendan Gallagher
parent b588babdb2
commit a36b643019
3 changed files with 26 additions and 16 deletions

View 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 {

View File

@ -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);

View File

@ -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' ) {