Lines 80-86
sub get_elasticsearch {
Link Here
|
80 |
$self->{elasticsearch} = Search::Elasticsearch->new( |
80 |
$self->{elasticsearch} = Search::Elasticsearch->new( |
81 |
client => "5_0::Direct", |
81 |
client => "5_0::Direct", |
82 |
nodes => $conf->{nodes}, |
82 |
nodes => $conf->{nodes}, |
83 |
cxn_pool => 'Sniff' |
83 |
cxn_pool => 'Sniff', |
|
|
84 |
request_timeout => 60 |
84 |
); |
85 |
); |
85 |
} |
86 |
} |
86 |
return $self->{elasticsearch}; |
87 |
return $self->{elasticsearch}; |
Lines 348-355
sub marc_records_to_documents {
Link Here
|
348 |
} |
349 |
} |
349 |
} |
350 |
} |
350 |
else { |
351 |
else { |
351 |
my $subfields_mappings = $data_fields_rules->{$field->tag()}; |
352 |
my $data_field_rules = $data_fields_rules->{$field->tag()}; |
352 |
if ($subfields_mappings) { |
353 |
|
|
|
354 |
if ($data_field_rules) { |
355 |
my $subfields_mappings = $data_field_rules->{subfields}; |
353 |
my $wildcard_mappings = $subfields_mappings->{'*'}; |
356 |
my $wildcard_mappings = $subfields_mappings->{'*'}; |
354 |
foreach my $subfield ($field->subfields()) { |
357 |
foreach my $subfield ($field->subfields()) { |
355 |
my ($code, $data) = @{$subfield}; |
358 |
my ($code, $data) = @{$subfield}; |
Lines 361-366
sub marc_records_to_documents {
Link Here
|
361 |
_process_mappings($mappings, $data, $record_document); |
364 |
_process_mappings($mappings, $data, $record_document); |
362 |
} |
365 |
} |
363 |
} |
366 |
} |
|
|
367 |
|
368 |
my $subfields_join_mappings = $data_field_rules->{subfields_join}; |
369 |
if ($subfields_join_mappings) { |
370 |
foreach my $subfields_group (keys %{$subfields_join_mappings}) { |
371 |
# Map each subfield to values, remove empty values, join with space |
372 |
my $data = join( |
373 |
' ', |
374 |
grep( |
375 |
$_, |
376 |
map { join(' ', $field->subfield($_)) } split(//, $subfields_group) |
377 |
) |
378 |
); |
379 |
if ($data) { |
380 |
_process_mappings($subfields_join_mappings->{$subfields_group}, $data, $record_document); |
381 |
} |
382 |
} |
383 |
} |
364 |
} |
384 |
} |
365 |
} |
385 |
} |
366 |
} |
386 |
} |
Lines 463-469
sub get_marc_mapping_rules {
Link Here
|
463 |
} |
483 |
} |
464 |
return @mappings; |
484 |
return @mappings; |
465 |
}; |
485 |
}; |
466 |
my $field_spec_regexp = qr/^([0-9]{3})([0-9a-z]+)?(?:_\/(\d+(?:-\d+)?))?$/; |
486 |
my $field_spec_regexp = qr/^([0-9]{3})([()0-9a-z]+)?(?:_\/(\d+(?:-\d+)?))?$/; |
467 |
my $leader_regexp = qr/^leader(?:_\/(\d+(?:-\d+)?))?$/; |
487 |
my $leader_regexp = qr/^leader(?:_\/(\d+(?:-\d+)?))?$/; |
468 |
my $rules = { |
488 |
my $rules = { |
469 |
'leader' => [], |
489 |
'leader' => [], |
Lines 488-506
sub get_marc_mapping_rules {
Link Here
|
488 |
|
508 |
|
489 |
if ($marc_field =~ $field_spec_regexp) { |
509 |
if ($marc_field =~ $field_spec_regexp) { |
490 |
my $field_tag = $1; |
510 |
my $field_tag = $1; |
491 |
my $subfields = defined $2 ? $2 : '*'; |
511 |
|
|
|
512 |
my @subfields; |
513 |
my @subfield_groups; |
514 |
# Parse and separate subfields form subfield groups |
515 |
if (defined $2) { |
516 |
my $subfield_group = ''; |
517 |
my $open_group = 0; |
518 |
|
519 |
foreach my $token (split //, $2) { |
520 |
if ($token eq "(") { |
521 |
if ($open_group) { |
522 |
die("Unmatched opening parenthesis for $marc_field"); |
523 |
} |
524 |
else { |
525 |
$open_group = 1; |
526 |
} |
527 |
} |
528 |
elsif ($token eq ")") { |
529 |
if ($open_group) { |
530 |
if ($subfield_group) { |
531 |
push @subfield_groups, $subfield_group; |
532 |
$subfield_group = ''; |
533 |
} |
534 |
$open_group = 0; |
535 |
} |
536 |
else { |
537 |
die("Unmatched closing parenthesis for $marc_field"); |
538 |
} |
539 |
} |
540 |
elsif ($open_group) { |
541 |
$subfield_group .= $token; |
542 |
} |
543 |
else { |
544 |
push @subfields, $token; |
545 |
} |
546 |
} |
547 |
} |
548 |
else { |
549 |
push @subfields, '*'; |
550 |
} |
551 |
|
492 |
my $range = defined $3 ? $3 : undef; |
552 |
my $range = defined $3 ? $3 : undef; |
|
|
553 |
my @mappings = _field_mappings($facet, $suggestible, $sort, $name, $type, $range); |
554 |
|
493 |
if ($field_tag < 10) { |
555 |
if ($field_tag < 10) { |
494 |
$rules->{control_fields}->{$field_tag} //= []; |
556 |
$rules->{control_fields}->{$field_tag} //= []; |
495 |
my @mappings = _field_mappings($facet, $suggestible, $sort, $name, $type, $range); |
|
|
496 |
push @{$rules->{control_fields}->{$field_tag}}, @mappings; |
557 |
push @{$rules->{control_fields}->{$field_tag}}, @mappings; |
497 |
} |
558 |
} |
498 |
else { |
559 |
else { |
499 |
$rules->{data_fields}->{$field_tag} //= {}; |
560 |
$rules->{data_fields}->{$field_tag} //= {}; |
500 |
foreach my $subfield (split //, $subfields) { |
561 |
foreach my $subfield (@subfields) { |
501 |
$rules->{data_fields}->{$field_tag}->{$subfield} //= []; |
562 |
$rules->{data_fields}->{$field_tag}->{subfields}->{$subfield} //= []; |
502 |
my @mappings = _field_mappings($facet, $suggestible, $sort, $name, $type, $range); |
563 |
push @{$rules->{data_fields}->{$field_tag}->{subfields}->{$subfield}}, @mappings; |
503 |
push @{$rules->{data_fields}->{$field_tag}->{$subfield}}, @mappings; |
564 |
} |
|
|
565 |
foreach my $subfield_group (@subfield_groups) { |
566 |
$rules->{data_fields}->{$field_tag}->{subfields_join}->{$subfield_group} //= []; |
567 |
push @{$rules->{data_fields}->{$field_tag}->{subfields_join}->{$subfield_group}}, @mappings; |
504 |
} |
568 |
} |
505 |
} |
569 |
} |
506 |
} |
570 |
} |
507 |
- |
|
|