Lines 312-318
sub marc_records_to_documents {
Link Here
|
312 |
my @record_documents; |
312 |
my @record_documents; |
313 |
|
313 |
|
314 |
sub _process_mappings { |
314 |
sub _process_mappings { |
315 |
my ($mappings, $data, $record_document) = @_; |
315 |
my ($mappings, $data, $record_document, $altscript) = @_; |
316 |
foreach my $mapping (@{$mappings}) { |
316 |
foreach my $mapping (@{$mappings}) { |
317 |
my ($target, $options) = @{$mapping}; |
317 |
my ($target, $options) = @{$mapping}; |
318 |
# Copy (scalar) data since can have multiple targets |
318 |
# Copy (scalar) data since can have multiple targets |
Lines 332-355
sub marc_records_to_documents {
Link Here
|
332 |
$options->{property} => $_data |
332 |
$options->{property} => $_data |
333 |
} |
333 |
} |
334 |
} |
334 |
} |
335 |
push @{$record_document->{$target}}, $_data; |
335 |
|
|
|
336 |
# For sort fields, index only a single field with concatenated values |
337 |
# and ignore alt script fields |
338 |
if ($target =~ /__sort$/) { |
339 |
if (!$altscript) { |
340 |
if (!@{$record_document->{$target}}) { |
341 |
push @{$record_document->{$target}}, $_data; |
342 |
} else { |
343 |
@{$record_document->{$target}}[0] .= " $_data"; |
344 |
} |
345 |
} |
346 |
} else { |
347 |
push @{$record_document->{$target}}, $_data; |
348 |
} |
336 |
} |
349 |
} |
337 |
} |
350 |
} |
338 |
foreach my $record (@{$records}) { |
351 |
foreach my $record (@{$records}) { |
339 |
my $record_document = {}; |
352 |
my $record_document = {}; |
340 |
my $mappings = $rules->{leader}; |
353 |
my $mappings = $rules->{leader}; |
341 |
if ($mappings) { |
354 |
if ($mappings) { |
342 |
_process_mappings($mappings, $record->leader(), $record_document); |
355 |
_process_mappings($mappings, $record->leader(), $record_document, 0); |
343 |
} |
356 |
} |
344 |
foreach my $field ($record->fields()) { |
357 |
foreach my $field ($record->fields()) { |
345 |
if($field->is_control_field()) { |
358 |
if ($field->is_control_field()) { |
346 |
my $mappings = $control_fields_rules->{$field->tag()}; |
359 |
my $mappings = $control_fields_rules->{$field->tag()}; |
347 |
if ($mappings) { |
360 |
if ($mappings) { |
348 |
_process_mappings($mappings, $field->data(), $record_document); |
361 |
_process_mappings($mappings, $field->data(), $record_document, 0); |
349 |
} |
362 |
} |
350 |
} |
363 |
} else { |
351 |
else { |
364 |
my $tag = $field->tag(); |
352 |
my $subfields_mappings = $data_fields_rules->{$field->tag()}; |
365 |
# Handle alternate scripts in MARC 21 |
|
|
366 |
my $altscript = 0; |
367 |
if ($marcflavour eq 'marc21' && $tag eq '880') { |
368 |
my $sub6 = $field->subfield('6'); |
369 |
if ($sub6 =~ /^(...)-\d+/) { |
370 |
$tag = $1; |
371 |
$altscript = 1; |
372 |
} |
373 |
} |
374 |
my $subfields_mappings = $data_fields_rules->{$tag}; |
353 |
if ($subfields_mappings) { |
375 |
if ($subfields_mappings) { |
354 |
my $wildcard_mappings = $subfields_mappings->{'*'}; |
376 |
my $wildcard_mappings = $subfields_mappings->{'*'}; |
355 |
foreach my $subfield ($field->subfields()) { |
377 |
foreach my $subfield ($field->subfields()) { |