Bug 12478: change the schema for storing mappings

This makes the mapping schema a proper many-to-many relational
structure, which is a little more fiddly to work with, but will make
things like editors for it easier to write.

Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
Signed-off-by: Jesse Weaver <jweaver@bywatersolutions.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
This commit is contained in:
Robin Sheat 2015-06-10 14:35:33 +12:00 committed by Tomas Cohen Arazi
parent f0d4afac61
commit 4393c233d6
6 changed files with 469 additions and 146 deletions

View File

@ -174,10 +174,11 @@ sub get_elasticsearch_mappings {
}
}
};
my $marcflavour = lc C4::Context->preference('marcflavour');
$self->_foreach_mapping(
sub {
my ( undef, $name, $type, $facet ) = @_;
my ( $name, $type, $facet, $marc_type ) = @_;
return if $marc_type ne $marcflavour;
# TODO if this gets any sort of complexity to it, it should
# be broken out into its own function.
@ -221,19 +222,18 @@ sub get_fixer_rules {
my @rules;
$self->_foreach_mapping(
sub {
my ( undef, $name, $type, $facet, $marcs ) = @_;
my $field = $marcs->{$marcflavour};
return unless defined $marcs->{$marcflavour};
my ( $name, $type, $facet, $marc_type, $marc_field ) = @_;
return if $marc_type ne $marcflavour;
my $options = '';
# There's a bug when using 'split' with something that
# selects a range
# The split makes everything into nested arrays, but that's not
# really a big deal, ES doesn't mind.
$options = '-split => 1' unless $field =~ m|_/| || $type eq 'sum';
push @rules, "marc_map('$field','${name}', $options)";
$options = '-split => 1' unless $marc_field =~ m|_/| || $type eq 'sum';
push @rules, "marc_map('$marc_field','${name}', $options)";
if ($facet) {
push @rules, "marc_map('$field','${name}__facet', $options)";
push @rules, "marc_map('$marc_field','${name}__facet', $options)";
}
if ( $type eq 'boolean' ) {
@ -247,7 +247,7 @@ sub get_fixer_rules {
}
}
);
die Dumper(\@rules);
return \@rules;
}
@ -255,8 +255,9 @@ sub get_fixer_rules {
$self->_foreach_mapping(
sub {
my ( $id, $name, $type, $facet, $marcs ) = @_;
my $marc = $marcs->{marc21};
my ( $name, $type, $facet, $marc_type, $marc_field ) = @_;
return unless $marc_type eq 'marc21';
print "Data comes from: " . $marc_field . "\n";
}
);
@ -267,10 +268,6 @@ In the provided function, the files are:
=over 4
=item C<$id>
An ID number, corresponding to the entry in the database.
=item C<$name>
The field name for elasticsearch (corresponds to the 'mapping' column in the
@ -285,11 +282,15 @@ The type for this value, e.g. 'string'.
True if this value should be facetised. This only really makes sense if the
field is understood by the facet processing code anyway.
=item C<$marc>
=item C<$marc_type>
A hashref containing the MARC field specifiers for each MARC type. It's quite
possible for this to be undefined if there is otherwise an entry in a
different MARC form.
A string that indicates the MARC type that this mapping is for, e.g. 'marc21',
'unimarc', 'normarc'.
=item C<$marc_field>
A string that describes the MARC field that contains the data to extract.
These are of a form suited to Catmandu's MARC fixers.
=back
@ -302,20 +303,22 @@ sub _foreach_mapping {
my $database = Koha::Database->new();
my $schema = $database->schema();
my $rs =
$schema->resultset('ElasticsearchMapping')
->search( { indexname => $self->index } );
$schema->resultset('SearchMarcMap')
->search( { index_name => $self->index } );
for my $row ( $rs->all ) {
$sub->(
$row->id,
$row->mapping,
$row->type,
$row->facet,
{
marc21 => $row->marc21,
unimarc => $row->unimarc,
normarc => $row->normarc
}
);
my $marc_type = $row->marc_type;
my $marc_field = $row->marc_field;
my $facet = $row->facet;
my $search_field = $row->search_fields();
for my $sf ( $search_field->all ) {
$sub->(
$sf->name,
$sf->type,
$facet,
$marc_type,
$marc_field,
);
}
}
}

View File

@ -1,105 +0,0 @@
use utf8;
package Koha::Schema::Result::ElasticsearchMapping;
# Created by DBIx::Class::Schema::Loader
# DO NOT MODIFY THE FIRST PART OF THIS FILE
=head1 NAME
Koha::Schema::Result::ElasticsearchMapping
=cut
use strict;
use warnings;
use base 'DBIx::Class::Core';
=head1 TABLE: C<elasticsearch_mapping>
=cut
__PACKAGE__->table("elasticsearch_mapping");
=head1 ACCESSORS
=head2 id
data_type: 'integer'
is_auto_increment: 1
is_nullable: 0
=head2 mapping
data_type: 'varchar'
is_nullable: 1
size: 255
=head2 type
data_type: 'varchar'
is_nullable: 0
size: 255
=head2 facet
data_type: 'tinyint'
default_value: 0
is_nullable: 1
=head2 marc21
data_type: 'varchar'
is_nullable: 1
size: 255
=head2 unimarc
data_type: 'varchar'
is_nullable: 1
size: 255
=head2 normarc
data_type: 'varchar'
is_nullable: 1
size: 255
=cut
__PACKAGE__->add_columns(
"id",
{ data_type => "integer", is_auto_increment => 1, is_nullable => 0 },
"mapping",
{ data_type => "varchar", is_nullable => 1, size => 255 },
"type",
{ data_type => "varchar", is_nullable => 0, size => 255 },
"facet",
{ data_type => "tinyint", default_value => 0, is_nullable => 1 },
"marc21",
{ data_type => "varchar", is_nullable => 1, size => 255 },
"unimarc",
{ data_type => "varchar", is_nullable => 1, size => 255 },
"normarc",
{ data_type => "varchar", is_nullable => 1, size => 255 },
);
=head1 PRIMARY KEY
=over 4
=item * L</id>
=back
=cut
__PACKAGE__->set_primary_key("id");
# Created by DBIx::Class::Schema::Loader v0.07040 @ 2014-07-01 15:12:50
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:D9WpVp24RV/MGHktgXzdkQ
# You can replace this text with custom code or comments, and it will be preserved on regeneration
1;

View File

@ -0,0 +1,122 @@
use utf8;
package Koha::Schema::Result::SearchField;
# Created by DBIx::Class::Schema::Loader
# DO NOT MODIFY THE FIRST PART OF THIS FILE
=head1 NAME
Koha::Schema::Result::SearchField
=cut
use strict;
use warnings;
use base 'DBIx::Class::Core';
=head1 TABLE: C<search_field>
=cut
__PACKAGE__->table("search_field");
=head1 ACCESSORS
=head2 id
data_type: 'integer'
is_auto_increment: 1
is_nullable: 0
=head2 name
data_type: 'varchar'
is_nullable: 0
size: 255
the name of the field as it will be stored in the search engine
=head2 type
data_type: 'enum'
extra: {list => ["string","date","number","boolean","sum"]}
is_nullable: 0
what type of data this holds, relevant when storing it
=cut
__PACKAGE__->add_columns(
"id",
{ data_type => "integer", is_auto_increment => 1, is_nullable => 0 },
"name",
{ data_type => "varchar", is_nullable => 0, size => 255 },
"type",
{
data_type => "enum",
extra => { list => ["string", "date", "number", "boolean", "sum"] },
is_nullable => 0,
},
);
=head1 PRIMARY KEY
=over 4
=item * L</id>
=back
=cut
__PACKAGE__->set_primary_key("id");
=head1 UNIQUE CONSTRAINTS
=head2 C<name>
=over 4
=item * L</name>
=back
=cut
__PACKAGE__->add_unique_constraint("name", ["name"]);
=head1 RELATIONS
=head2 search_marc_to_fields
Type: has_many
Related object: L<Koha::Schema::Result::SearchMarcToField>
=cut
__PACKAGE__->has_many(
"search_marc_to_fields",
"Koha::Schema::Result::SearchMarcToField",
{ "foreign.search_field_id" => "self.id" },
{ cascade_copy => 0, cascade_delete => 0 },
);
=head2 search_marc_maps
Type: many_to_many
Composing rels: L</search_marc_to_fields> -> search_marc_map
=cut
__PACKAGE__->many_to_many("search_marc_maps", "search_marc_to_fields", "search_marc_map");
# Created by DBIx::Class::Schema::Loader v0.07042 @ 2015-06-10 14:32:07
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:1pj98qkKkP9g0hJYExud0A
# You can replace this text with custom code or comments, and it will be preserved on regeneration
1;

View File

@ -0,0 +1,150 @@
use utf8;
package Koha::Schema::Result::SearchMarcMap;
# Created by DBIx::Class::Schema::Loader
# DO NOT MODIFY THE FIRST PART OF THIS FILE
=head1 NAME
Koha::Schema::Result::SearchMarcMap
=cut
use strict;
use warnings;
use base 'DBIx::Class::Core';
=head1 TABLE: C<search_marc_map>
=cut
__PACKAGE__->table("search_marc_map");
=head1 ACCESSORS
=head2 id
data_type: 'integer'
is_auto_increment: 1
is_nullable: 0
=head2 index_name
data_type: 'enum'
extra: {list => ["biblios","authorities"]}
is_nullable: 0
what storage index this map is for
=head2 marc_type
data_type: 'enum'
extra: {list => ["marc21","unimarc","normarc"]}
is_nullable: 0
what MARC type this map is for
=head2 marc_field
data_type: 'varchar'
is_nullable: 0
size: 255
the MARC specifier for this field
=head2 facet
data_type: 'tinyint'
default_value: 0
is_nullable: 1
true if a facet field should be generated for this
=cut
__PACKAGE__->add_columns(
"id",
{ data_type => "integer", is_auto_increment => 1, is_nullable => 0 },
"index_name",
{
data_type => "enum",
extra => { list => ["biblios", "authorities"] },
is_nullable => 0,
},
"marc_type",
{
data_type => "enum",
extra => { list => ["marc21", "unimarc", "normarc"] },
is_nullable => 0,
},
"marc_field",
{ data_type => "varchar", is_nullable => 0, size => 255 },
"facet",
{ data_type => "tinyint", default_value => 0, is_nullable => 1 },
);
=head1 PRIMARY KEY
=over 4
=item * L</id>
=back
=cut
__PACKAGE__->set_primary_key("id");
=head1 UNIQUE CONSTRAINTS
=head2 C<index_name_2>
=over 4
=item * L</index_name>
=item * L</marc_type>
=item * L</marc_field>
=back
=cut
__PACKAGE__->add_unique_constraint("index_name_2", ["index_name", "marc_type", "marc_field"]);
=head1 RELATIONS
=head2 search_marc_to_fields
Type: has_many
Related object: L<Koha::Schema::Result::SearchMarcToField>
=cut
__PACKAGE__->has_many(
"search_marc_to_fields",
"Koha::Schema::Result::SearchMarcToField",
{ "foreign.search_marc_map_id" => "self.id" },
{ cascade_copy => 0, cascade_delete => 0 },
);
=head2 search_fields
Type: many_to_many
Composing rels: L</search_marc_to_fields> -> search_field
=cut
__PACKAGE__->many_to_many("search_fields", "search_marc_to_fields", "search_field");
# Created by DBIx::Class::Schema::Loader v0.07042 @ 2015-06-10 14:32:07
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:9Xz04ajKUJXxwJ5pdo+cUQ
# You can replace this text with custom code or comments, and it will be preserved on regeneration
1;

View File

@ -0,0 +1,99 @@
use utf8;
package Koha::Schema::Result::SearchMarcToField;
# Created by DBIx::Class::Schema::Loader
# DO NOT MODIFY THE FIRST PART OF THIS FILE
=head1 NAME
Koha::Schema::Result::SearchMarcToField
=cut
use strict;
use warnings;
use base 'DBIx::Class::Core';
=head1 TABLE: C<search_marc_to_field>
=cut
__PACKAGE__->table("search_marc_to_field");
=head1 ACCESSORS
=head2 search_marc_map_id
data_type: 'integer'
is_foreign_key: 1
is_nullable: 0
=head2 search_field_id
data_type: 'integer'
is_foreign_key: 1
is_nullable: 0
=cut
__PACKAGE__->add_columns(
"search_marc_map_id",
{ data_type => "integer", is_foreign_key => 1, is_nullable => 0 },
"search_field_id",
{ data_type => "integer", is_foreign_key => 1, is_nullable => 0 },
);
=head1 PRIMARY KEY
=over 4
=item * L</search_marc_map_id>
=item * L</search_field_id>
=back
=cut
__PACKAGE__->set_primary_key("search_marc_map_id", "search_field_id");
=head1 RELATIONS
=head2 search_field
Type: belongs_to
Related object: L<Koha::Schema::Result::SearchField>
=cut
__PACKAGE__->belongs_to(
"search_field",
"Koha::Schema::Result::SearchField",
{ id => "search_field_id" },
{ is_deferrable => 1, on_delete => "RESTRICT", on_update => "RESTRICT" },
);
=head2 search_marc_map
Type: belongs_to
Related object: L<Koha::Schema::Result::SearchMarcMap>
=cut
__PACKAGE__->belongs_to(
"search_marc_map",
"Koha::Schema::Result::SearchMarcMap",
{ id => "search_marc_map_id" },
{ is_deferrable => 1, on_delete => "RESTRICT", on_update => "RESTRICT" },
);
# Created by DBIx::Class::Schema::Loader v0.07042 @ 2015-06-10 14:32:07
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:ZNdjnjdGpK+5P478RkCWnA
# You can replace this text with custom code or comments, and it will be preserved on regeneration
1;

View File

@ -1,4 +1,7 @@
DROP TABLE IF EXISTS elasticsearch_mapping;
DROP TABLE IF EXISTS search_marc_to_field;
DROP TABLE IF EXISTS search_field;
DROP TABLE IF EXISTS search_marc_map;
CREATE TABLE `elasticsearch_mapping` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`indexname` varchar(255) NOT NULL,
@ -11,21 +14,56 @@ CREATE TABLE `elasticsearch_mapping` (
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- This specifies the fields that will be stored in the search engine.
CREATE TABLE `search_field` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL COMMENT 'the name of the field as it will be stored in the search engine',
`type` ENUM('string', 'date', 'number', 'boolean', 'sum') NOT NULL COMMENT 'what type of data this holds, relevant when storing it',
PRIMARY KEY (`id`),
UNIQUE KEY (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- This contains a MARC field specifier for a given index, marc type, and marc
-- field.
CREATE TABLE `search_marc_map` (
id int(11) NOT NULL AUTO_INCREMENT,
index_name ENUM('biblios','authorities') NOT NULL COMMENT 'what storage index this map is for',
marc_type ENUM('marc21', 'unimarc', 'normarc') NOT NULL COMMENT 'what MARC type this map is for',
marc_field VARCHAR(255) NOT NULL COMMENT 'the MARC specifier for this field',
`facet` boolean DEFAULT FALSE COMMENT 'true if a facet field should be generated for this',
PRIMARY KEY(`id`),
INDEX (`index_name`),
UNIQUE KEY (index_name, marc_type, marc_field)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- This joins the two search tables together. We can have any combination:
-- one marc field could have many search fields (maybe you want one value
-- to go to 'author' and 'corporate-author) and many marc fields could go
-- to one search field (e.g. all the various author fields going into
-- 'author'.)
CREATE TABLE `search_marc_to_field` (
search_marc_map_id int(11) NOT NULL,
search_field_id int(11) NOT NULL,
PRIMARY KEY(search_marc_map_id, search_field_id),
FOREIGN KEY(search_marc_map_id) REFERENCES search_marc_map(id),
FOREIGN KEY(search_field_id) REFERENCES search_field(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `elasticsearch_mapping` (`indexname`, `mapping`, `facet`, `type`, `marc21`, `unimarc`, `normarc`) VALUES ('biblios','llength',FALSE,'','leader_/1-5',NULL,'leader_/1-5');
INSERT INTO `elasticsearch_mapping` (`indexname`, `mapping`, `facet`, `type`, `marc21`, `unimarc`, `normarc`) VALUES ('biblios','rtype',FALSE,'','leader_/6',NULL,'leader_/6');
INSERT INTO `elasticsearch_mapping` (`indexname`, `mapping`, `facet`, `type`, `marc21`, `unimarc`, `normarc`) VALUES ('biblios','bib-level',FALSE,'','leader_/7',NULL,'leader_/7');
INSERT INTO `elasticsearch_mapping` (`indexname`, `mapping`, `facet`, `type`, `marc21`, `unimarc`, `normarc`) VALUES ('biblios','control-number',FALSE,'','001',NULL,'001');
INSERT INTO `elasticsearch_mapping` (`indexname`, `mapping`, `facet`, `type`, `marc21`, `unimarc`, `normarc`) VALUES ('biblios','local-number',FALSE,'',NULL,'001',NULL);
INSERT INTO `elasticsearch_mapping` (`indexname`, `mapping`, `facet`, `type`, `marc21`, `unimarc`, `normarc`) VALUES ('biblios','local-number',FALSE,'string',NULL,'001',NULL);
INSERT INTO `elasticsearch_mapping` (`indexname`, `mapping`, `facet`, `type`, `marc21`, `unimarc`, `normarc`) VALUES ('biblios','date-time-last-modified',FALSE,'','005','099d',NULL);
INSERT INTO `elasticsearch_mapping` (`indexname`, `mapping`, `facet`, `type`, `marc21`, `unimarc`, `normarc`) VALUES ('biblios','microform-generation',FALSE,'','007_/11',NULL,'007_/11');
INSERT INTO `elasticsearch_mapping` (`indexname`, `mapping`, `facet`, `type`, `marc21`, `unimarc`, `normarc`) VALUES ('biblios','material-type',FALSE,'','007','200b','007');
INSERT INTO `elasticsearch_mapping` (`indexname`, `mapping`, `facet`, `type`, `marc21`, `unimarc`, `normarc`) VALUES ('biblios','material-type',FALSE,'','007','','007');
INSERT INTO `elasticsearch_mapping` (`indexname`, `mapping`, `facet`, `type`, `marc21`, `unimarc`, `normarc`) VALUES ('biblios','ff7-00',FALSE,'','007_/1',NULL,'007_/1');
INSERT INTO `elasticsearch_mapping` (`indexname`, `mapping`, `facet`, `type`, `marc21`, `unimarc`, `normarc`) VALUES ('biblios','ff7-01',FALSE,'','007_/2',NULL,'007_/2');
INSERT INTO `elasticsearch_mapping` (`indexname`, `mapping`, `facet`, `type`, `marc21`, `unimarc`, `normarc`) VALUES ('biblios','ff7-02',FALSE,'','007_/3',NULL,'007_/3');
INSERT INTO `elasticsearch_mapping` (`indexname`, `mapping`, `facet`, `type`, `marc21`, `unimarc`, `normarc`) VALUES ('biblios','ff7-01-02',FALSE,'','007_/1-2',NULL,'007_/1-2');
INSERT INTO `elasticsearch_mapping` (`indexname`, `mapping`, `facet`, `type`, `marc21`, `unimarc`, `normarc`) VALUES ('biblios','date-entered-on-file',FALSE,'','008_/1-5','099c','008_/1-5');
INSERT INTO `elasticsearch_mapping` (`indexname`, `mapping`, `facet`, `type`, `marc21`, `unimarc`, `normarc`) VALUES ('biblios','pubdate',FALSE,'','008_/7-10','100a_/9-12','008_/7-10');
INSERT INTO `elasticsearch_mapping` (`indexname`, `mapping`, `facet`, `type`, `marc21`, `unimarc`, `normarc`) VALUES ('biblios','pl',FALSE,'','008_/15-17','210a','008_/15-17');
INSERT INTO `elasticsearch_mapping` (`indexname`, `mapping`, `facet`, `type`, `marc21`, `unimarc`, `normarc`) VALUES ('biblios','pl',FALSE,'','008_/15-17','','008_/15-17');
INSERT INTO `elasticsearch_mapping` (`indexname`, `mapping`, `facet`, `type`, `marc21`, `unimarc`, `normarc`) VALUES ('biblios','ta',FALSE,'','008_/22','100a_/17','008_/22');
INSERT INTO `elasticsearch_mapping` (`indexname`, `mapping`, `facet`, `type`, `marc21`, `unimarc`, `normarc`) VALUES ('biblios','ff8-23',FALSE,'','008_/23',NULL,'008_/23');
INSERT INTO `elasticsearch_mapping` (`indexname`, `mapping`, `facet`, `type`, `marc21`, `unimarc`, `normarc`) VALUES ('biblios','ff8-29',FALSE,'','008_/29','105a_/8','008_/29');
@ -33,7 +71,7 @@ INSERT INTO `elasticsearch_mapping` (`indexname`, `mapping`, `facet`, `type`, `m
INSERT INTO `elasticsearch_mapping` (`indexname`, `mapping`, `facet`, `type`, `marc21`, `unimarc`, `normarc`) VALUES ('biblios','bio',FALSE,'','008_/34','105a_/12','008_/34');
INSERT INTO `elasticsearch_mapping` (`indexname`, `mapping`, `facet`, `type`, `marc21`, `unimarc`, `normarc`) VALUES ('biblios','ln',FALSE,'','008_/35-37','101a','008_/35-37');
INSERT INTO `elasticsearch_mapping` (`indexname`, `mapping`, `facet`, `type`, `marc21`, `unimarc`, `normarc`) VALUES ('biblios','ctype',FALSE,'','008_/24-27','105a_/4-7','008_/24-27');
INSERT INTO `elasticsearch_mapping` (`indexname`, `mapping`, `facet`, `type`, `marc21`, `unimarc`, `normarc`) VALUES ('biblios','record-source',FALSE,'','008_/39','995c','008_/39');
INSERT INTO `elasticsearch_mapping` (`indexname`, `mapping`, `facet`, `type`, `marc21`, `unimarc`, `normarc`) VALUES ('biblios','record-source',FALSE,'','008_/39','','008_/39');
INSERT INTO `elasticsearch_mapping` (`indexname`, `mapping`, `facet`, `type`, `marc21`, `unimarc`, `normarc`) VALUES ('biblios','lc-cardnumber',FALSE,'','010','995j','010');
INSERT INTO `elasticsearch_mapping` (`indexname`, `mapping`, `facet`, `type`, `marc21`, `unimarc`, `normarc`) VALUES ('biblios','lc-cardnumber',FALSE,'','011',NULL,NULL);
INSERT INTO `elasticsearch_mapping` (`indexname`, `mapping`, `facet`, `type`, `marc21`, `unimarc`, `normarc`) VALUES ('biblios','identifier-standard',FALSE,'','010',NULL,'010');
@ -54,7 +92,7 @@ INSERT INTO `elasticsearch_mapping` (`indexname`, `mapping`, `facet`, `type`, `m
INSERT INTO `elasticsearch_mapping` (`indexname`, `mapping`, `facet`, `type`, `marc21`, `unimarc`, `normarc`) VALUES ('biblios','author',TRUE,'string','110a','200g','110a');
INSERT INTO `elasticsearch_mapping` (`indexname`, `mapping`, `facet`, `type`, `marc21`, `unimarc`, `normarc`) VALUES ('biblios','author',TRUE,'string','111a',NULL,'111a');
INSERT INTO `elasticsearch_mapping` (`indexname`, `mapping`, `facet`, `type`, `marc21`, `unimarc`, `normarc`) VALUES ('biblios','author',TRUE,'string','700a','700a','700a');
INSERT INTO `elasticsearch_mapping` (`indexname`, `mapping`, `facet`, `type`, `marc21`, `unimarc`, `normarc`) VALUES ('biblios','author',FALSE,'string','245c','701','245c');
INSERT INTO `elasticsearch_mapping` (`indexname`, `mapping`, `facet`, `type`, `marc21`, `unimarc`, `normarc`) VALUES ('biblios','author',TRUE,'string','245c','701','245c');
INSERT INTO `elasticsearch_mapping` (`indexname`, `mapping`, `facet`, `type`, `marc21`, `unimarc`, `normarc`) VALUES ('biblios','title',FALSE,'string','245a','200a','245a');
INSERT INTO `elasticsearch_mapping` (`indexname`, `mapping`, `facet`, `type`, `marc21`, `unimarc`, `normarc`) VALUES ('biblios','title',FALSE,'string','246','200c','246');
INSERT INTO `elasticsearch_mapping` (`indexname`, `mapping`, `facet`, `type`, `marc21`, `unimarc`, `normarc`) VALUES ('biblios','title',FALSE,'string','247','200d','247');
@ -132,11 +170,11 @@ INSERT INTO `elasticsearch_mapping` (`indexname`, `mapping`, `facet`, `type`, `m
INSERT INTO `elasticsearch_mapping` (`indexname`, `mapping`, `facet`, `type`, `marc21`, `unimarc`, `normarc`) VALUES ('biblios','subject',TRUE,'string','653a','610','653');
INSERT INTO `elasticsearch_mapping` (`indexname`, `mapping`, `facet`, `type`, `marc21`, `unimarc`, `normarc`) VALUES ('biblios','local-classification',FALSE,'','952o','995k','952o');
INSERT INTO `elasticsearch_mapping` (`indexname`, `mapping`, `facet`, `type`, `marc21`, `unimarc`, `normarc`) VALUES ('biblios','local-classification',FALSE,'',NULL,'686',NULL);
INSERT INTO `elasticsearch_mapping` (`indexname`, `mapping`, `facet`, `type`, `marc21`, `unimarc`, `normarc`) VALUES ('biblios','local-number',FALSE,'','999c','001','999c');
INSERT INTO `elasticsearch_mapping` (`indexname`, `mapping`, `facet`, `type`, `marc21`, `unimarc`, `normarc`) VALUES ('biblios','local-number',FALSE,'',NULL,'0909',NULL);
INSERT INTO `elasticsearch_mapping` (`indexname`, `mapping`, `facet`, `type`, `marc21`, `unimarc`, `normarc`) VALUES ('biblios','local-number',FALSE,'string','999c','001','999c');
INSERT INTO `elasticsearch_mapping` (`indexname`, `mapping`, `facet`, `type`, `marc21`, `unimarc`, `normarc`) VALUES ('biblios','local-number',FALSE,'string',NULL,'0909',NULL);
INSERT INTO `elasticsearch_mapping` (`indexname`, `mapping`, `facet`, `type`, `marc21`, `unimarc`, `normarc`) VALUES ('biblios','itype',TRUE,'string','942c','200b','942c');
INSERT INTO `elasticsearch_mapping` (`indexname`, `mapping`, `facet`, `type`, `marc21`, `unimarc`, `normarc`) VALUES ('biblios','itype',TRUE,'string','952y','995r','952y');
INSERT INTO `elasticsearch_mapping` (`indexname`, `mapping`, `facet`, `type`, `marc21`, `unimarc`, `normarc`) VALUES ('biblios','acqdate',FALSE,'date','952d','9955','952y');
INSERT INTO `elasticsearch_mapping` (`indexname`, `mapping`, `facet`, `type`, `marc21`, `unimarc`, `normarc`) VALUES ('biblios','acqdate',FALSE,'date','952d','9955','952d');
INSERT INTO `elasticsearch_mapping` (`indexname`, `mapping`, `facet`, `type`, `marc21`, `unimarc`, `normarc`) VALUES ('biblios','place',TRUE,'string','260a','210a','260a');
INSERT INTO `elasticsearch_mapping` (`indexname`, `mapping`, `facet`, `type`, `marc21`, `unimarc`, `normarc`) VALUES ('biblios','publisher',TRUE,'string','260b','210c','260b');
INSERT INTO `elasticsearch_mapping` (`indexname`, `mapping`, `facet`, `type`, `marc21`, `unimarc`, `normarc`) VALUES ('biblios','copydate',TRUE,'date','260c',NULL,'260c'); -- No copydate for unimarc? Seems strange.
@ -192,7 +230,7 @@ INSERT INTO `elasticsearch_mapping` (`indexname`, `mapping`, `facet`, `type`, `m
INSERT INTO `elasticsearch_mapping` (`indexname`, `mapping`, `facet`, `type`, `marc21`, `unimarc`, `normarc`) VALUES ('biblios','an',FALSE,'number',NULL,'6219',NULL);
-- Authorities: incomplete
INSERT INTO `elasticsearch_mapping` (`indexname`, `mapping`, `facet`, `type`, `marc21`, `unimarc`, `normarc`) VALUES ('authorities','Local-Number',FALSE,'string','001',NULL,'001');
INSERT INTO `elasticsearch_mapping` (`indexname`, `mapping`, `facet`, `type`, `marc21`, `unimarc`, `normarc`) VALUES ('authorities','local-number',FALSE,'string','001',NULL,'001');
INSERT INTO `elasticsearch_mapping` (`indexname`, `mapping`, `facet`, `type`, `marc21`, `unimarc`, `normarc`) VALUES ('authorities','authtype',FALSE,'','942a',NULL,'942a');
INSERT INTO `elasticsearch_mapping` (`indexname`, `mapping`, `facet`, `type`, `marc21`, `unimarc`, `normarc`) VALUES ('authorities','Kind-of-record',FALSE,'','008_/9',NULL,'008_/9');
INSERT INTO `elasticsearch_mapping` (`indexname`, `mapping`, `facet`, `type`, `marc21`, `unimarc`, `normarc`) VALUES ('authorities','Descriptive-cataloging-rules',FALSE,'','008_/10',NULL,'008_/10');
@ -235,3 +273,19 @@ INSERT INTO `elasticsearch_mapping` (`indexname`, `mapping`, `facet`, `type`, `m
INSERT INTO `elasticsearch_mapping` (`indexname`, `mapping`, `facet`, `type`, `marc21`, `unimarc`, `normarc`) VALUES ('authorities','Meeting-name-see-also-from',FALSE,'','511acdefghjklnpqstvxyz',NULL,'511acdefghjklnpqstvxyz');
INSERT INTO `elasticsearch_mapping` (`indexname`, `mapping`, `facet`, `type`, `marc21`, `unimarc`, `normarc`) VALUES ('authorities','See-also-from',FALSE,'','511acdefghjklnpqstvxyz',NULL,'511acdefghjklnpqstvxyz');
INSERT INTO `elasticsearch_mapping` (`indexname`, `mapping`, `facet`, `type`, `marc21`, `unimarc`, `normarc`) VALUES ('authorities','Match',FALSE,'','511acdefghjklnpqstvxyz',NULL,'511acdefghjklnpqstvxyz');
-- temporary to convert into new table form
insert into search_marc_map(index_name, marc_type, marc_field, facet) select distinct indexname, 'marc21', marc21, facet from elasticsearch_mapping where marc21 is not null;
insert into search_marc_map(index_name, marc_type, marc_field, facet) select distinct indexname, 'unimarc', unimarc, facet from elasticsearch_mapping where unimarc is not null;
insert into search_marc_map(index_name, marc_type, marc_field, facet) select distinct indexname, 'normarc', normarc, facet from elasticsearch_mapping where normarc is not null;
insert into search_field (name, type) select distinct mapping, type from elasticsearch_mapping;
insert into search_marc_to_field(search_field_id, search_marc_map_id) select search_field.id,search_marc_map.id from search_field, search_marc_map, elasticsearch_mapping where elasticsearch_mapping.mapping=search_field.name AND elasticsearch_mapping.marc21=search_marc_map.marc_field AND search_marc_map.marc_type='marc21' AND index_name='biblios';
insert into search_marc_to_field(search_field_id, search_marc_map_id) select search_field.id,search_marc_map.id from search_field, search_marc_map, elasticsearch_mapping where elasticsearch_mapping.mapping=search_field.name AND elasticsearch_mapping.marc21=search_marc_map.marc_field AND search_marc_map.marc_type='unimarc' AND index_name='biblios';
insert into search_marc_to_field(search_field_id, search_marc_map_id) select search_field.id,search_marc_map.id from search_field, search_marc_map, elasticsearch_mapping where elasticsearch_mapping.mapping=search_field.name AND elasticsearch_mapping.marc21=search_marc_map.marc_field AND search_marc_map.marc_type='normarc' AND index_name='biblios';
insert into search_marc_to_field(search_field_id, search_marc_map_id) select search_field.id,search_marc_map.id from search_field, search_marc_map, elasticsearch_mapping where elasticsearch_mapping.mapping=search_field.name AND elasticsearch_mapping.marc21=search_marc_map.marc_field AND search_marc_map.marc_type='marc21' AND index_name='authorities';
insert into search_marc_to_field(search_field_id, search_marc_map_id) select search_field.id,search_marc_map.id from search_field, search_marc_map, elasticsearch_mapping where elasticsearch_mapping.mapping=search_field.name AND elasticsearch_mapping.marc21=search_marc_map.marc_field AND search_marc_map.marc_type='unimarc' AND index_name='authorities';
insert into search_marc_to_field(search_field_id, search_marc_map_id) select search_field.id,search_marc_map.id from search_field, search_marc_map, elasticsearch_mapping where elasticsearch_mapping.mapping=search_field.name AND elasticsearch_mapping.marc21=search_marc_map.marc_field AND search_marc_map.marc_type='normarc' AND index_name='authorities';
drop table elasticsearch_mapping;