Line 0
Link Here
|
|
|
1 |
package Koha::QueryParser::Driver::PQF; |
2 |
use base qw(OpenILS::QueryParser Class::Accessor); |
3 |
|
4 |
use strict; |
5 |
use warnings; |
6 |
|
7 |
use Module::Load::Conditional qw(can_load); |
8 |
use Koha::QueryParser::Driver::PQF::Util; |
9 |
use Koha::QueryParser::Driver::PQF::query_plan; |
10 |
use Koha::QueryParser::Driver::PQF::query_plan::facet; |
11 |
use Koha::QueryParser::Driver::PQF::query_plan::filter; |
12 |
use Koha::QueryParser::Driver::PQF::query_plan::modifier; |
13 |
use Koha::QueryParser::Driver::PQF::query_plan::node; |
14 |
use Koha::QueryParser::Driver::PQF::query_plan::node::atom; |
15 |
use Koha::QueryParser::Driver::PQF::query_plan::node::atom; |
16 |
|
17 |
|
18 |
=head1 NAME |
19 |
|
20 |
Koha::QueryParser::Driver::PQF - QueryParser driver for PQF |
21 |
|
22 |
=head1 SYNOPSIS |
23 |
|
24 |
use Koha::QueryParser::Driver::PQF; |
25 |
my $QParser = Koha::QueryParser::Driver::PQF->new(%args); |
26 |
|
27 |
=head1 DESCRIPTION |
28 |
|
29 |
Main entrypoint into the QueryParser PQF driver. PQF is the Prefix Query |
30 |
Language, the syntax used to serialize Z39.50 queries. |
31 |
|
32 |
=head1 ACCESSORS |
33 |
|
34 |
In order to simplify Bib-1 attribute mapping, this driver uses Class::Accessor |
35 |
for accessing the following maps: |
36 |
|
37 |
=over 4 |
38 |
|
39 |
=item B<bib1_field_map> - search class/field Bib-1 mappings |
40 |
|
41 |
=item B<bib1_modifier_map> - search modifier mappings |
42 |
|
43 |
=item B<bib1_filter_map> - search filter mappings |
44 |
|
45 |
=item B<bib1_relevance_bump_map> - relevance bump mappings |
46 |
|
47 |
=back |
48 |
|
49 |
=cut |
50 |
|
51 |
__PACKAGE__->mk_accessors(qw(bib1_field_map bib1_modifier_map bib1_filter_map bib1_relevance_bump_map)); |
52 |
|
53 |
=head1 FUNCTIONS |
54 |
|
55 |
=cut |
56 |
|
57 |
=head2 get |
58 |
|
59 |
Overridden accessor method for Class::Accessor. (Do not call directly) |
60 |
|
61 |
=cut |
62 |
|
63 |
sub get { |
64 |
my $self = shift; |
65 |
return $self->_map(@_); |
66 |
} |
67 |
|
68 |
=head2 set |
69 |
|
70 |
Overridden mutator method for Class::Accessor. (Do not call directly) |
71 |
|
72 |
=cut |
73 |
|
74 |
sub set { |
75 |
my $self = shift; |
76 |
return $self->_map(@_); |
77 |
} |
78 |
|
79 |
=head2 add_bib1_field_map |
80 |
|
81 |
$QParser->add_bib1_field_map($class => $field => $server => \%attributes); |
82 |
|
83 |
$QParser->add_bib1_field_map('author' => 'personal' => 'biblioserver' => |
84 |
{ '1' => '1003' }); |
85 |
|
86 |
Adds a search field<->bib1 attribute mapping for the specified server. The |
87 |
%attributes hash contains maps Bib-1 Attributes to the appropropriate |
88 |
values. Not all attributes must be specified. |
89 |
|
90 |
=cut |
91 |
|
92 |
sub add_bib1_field_map { |
93 |
my ($self, $class, $field, $server, $attributes) = @_; |
94 |
|
95 |
$self->add_search_field( $class => $field ); |
96 |
$self->add_search_field_alias( $class => $field => $field ); |
97 |
return $self->_add_field_mapping($self->bib1_field_map, $class, $field, $server, $attributes); |
98 |
} |
99 |
|
100 |
=head2 add_bib1_modifier_map |
101 |
|
102 |
$QParser->add_bib1_modifier_map($name => $server => \%attributes); |
103 |
|
104 |
$QParser->add_bib1_modifier_map('ascending' => 'biblioserver' => |
105 |
{ '7' => '1' }); |
106 |
|
107 |
Adds a search modifier<->bib1 attribute mapping for the specified server. The |
108 |
%attributes hash contains maps Bib-1 Attributes to the appropropriate |
109 |
values. Not all attributes must be specified. |
110 |
|
111 |
=cut |
112 |
|
113 |
sub add_bib1_modifier_map { |
114 |
my ($self, $name, $server, $attributes) = @_; |
115 |
|
116 |
$self->add_search_modifier( $name ); |
117 |
|
118 |
return $self->_add_mapping($self->bib1_modifier_map, $name, $server, $attributes); |
119 |
} |
120 |
|
121 |
=head2 add_bib1_filter_map |
122 |
|
123 |
$QParser->add_bib1_filter_map($name => $server => \%attributes); |
124 |
|
125 |
$QParser->add_bib1_filter_map('date' => 'biblioserver' => |
126 |
{ 'callback' => &_my_callback }); |
127 |
|
128 |
Adds a search filter<->bib1 attribute mapping for the specified server. The |
129 |
%attributes hash maps Bib-1 Attributes to the appropropriate values and |
130 |
provides a callback for the filter. Not all attributes must be specified. |
131 |
|
132 |
=cut |
133 |
|
134 |
sub add_bib1_filter_map { |
135 |
my ($self, $name, $server, $attributes) = @_; |
136 |
|
137 |
$self->add_search_filter( $name, $attributes->{'callback'} ); |
138 |
|
139 |
return $self->_add_mapping($self->bib1_filter_map, $server, $name, $attributes); |
140 |
} |
141 |
|
142 |
=head2 add_relevance_bump |
143 |
|
144 |
$QParser->add_relevance_bump($class, $field, $server, $multiplier, $active); |
145 |
$QParser->add_relevance_bump('title' => 'exact' => 'biblioserver' => 34, 1); |
146 |
|
147 |
Add a relevance bump to the specified field. When searching for a class without |
148 |
any fields, all the relevance bumps for the specified class will be 'OR'ed |
149 |
together. |
150 |
|
151 |
=cut |
152 |
|
153 |
sub add_relevance_bump { |
154 |
my ($self, $class, $field, $server, $multiplier, $active) = @_; |
155 |
my $attributes = { '9' => $multiplier, '2' => '102', 'active' => $active }; |
156 |
|
157 |
$self->add_search_field( $class => $field ); |
158 |
return $self->_add_field_mapping($self->bib1_relevance_bump_map, $class, $field, $server, $attributes); |
159 |
} |
160 |
|
161 |
|
162 |
=head2 target_syntax |
163 |
|
164 |
my $pqf = $QParser->target_syntax($server, [$query]); |
165 |
my $pqf = $QParser->target_syntax('biblioserver', 'author|personal:smith'); |
166 |
print $pqf; # assuming all the indexes are configured, |
167 |
# prints '@attr 1=1003 @attr 4=6 "smith"' |
168 |
|
169 |
Transforms the current or specified query into a PQF query string for the |
170 |
specified server. |
171 |
|
172 |
=cut |
173 |
|
174 |
sub target_syntax { |
175 |
my ($self, $server, $query) = @_; |
176 |
my $pqf = ''; |
177 |
$self->parse($query) if $query; |
178 |
warn "QP query for $server: " . $self->query . "\n" if $self->debug; |
179 |
$pqf = $self->parse_tree->target_syntax($server); |
180 |
warn "PQF query: $pqf\n" if $self->debug; |
181 |
return $pqf; |
182 |
} |
183 |
|
184 |
=head2 date_filter_target_callback |
185 |
|
186 |
$QParser->add_bib1_filter_map($server, { 'target_syntax_callback' => \&Koha::QueryParser::Driver::PQF::date_filter_target_callback, '1' => 'pubdate' }); |
187 |
|
188 |
Callback for date filters. Note that although the first argument is the QParser |
189 |
object, this is technically not an object-oriented routine. This has no |
190 |
real-world implications. |
191 |
|
192 |
=cut |
193 |
|
194 |
sub date_filter_target_callback { |
195 |
my ($QParser, $filter, $params, $negate, $server) = @_; |
196 |
my $attr_string = $QParser->bib1_mapping_by_name( 'filter', $server, $filter )->{'attr_string'}; |
197 |
my $pqf = ''; |
198 |
foreach my $datespec (@$params) { |
199 |
my $datepqf = ''; |
200 |
if ($datespec) { |
201 |
if ($datespec =~ m/(.*)-(.*)/) { |
202 |
if ($1) { |
203 |
$datepqf .= $attr_string . ' @attr 2=4 "' . $1 . '"'; |
204 |
} |
205 |
if ($2) { |
206 |
$datepqf .= $attr_string . ' @attr 2=2 "' . $2 . '"'; |
207 |
$datepqf = '@and ' . $datepqf if $1; |
208 |
} |
209 |
} else { |
210 |
$datepqf .= $attr_string . ' "' . $datespec . '"'; |
211 |
} |
212 |
} |
213 |
$pqf = ' @or ' . ($negate ? '@not @attr 1=_ALLRECORDS @attr 2=103 "" ' : '') . $pqf if $pqf; |
214 |
$pqf .= $datepqf; |
215 |
} |
216 |
return $pqf; |
217 |
} |
218 |
|
219 |
=head2 _map |
220 |
|
221 |
return $self->_map('bib1_field_map', $map); |
222 |
|
223 |
Retrieves or sets a map. |
224 |
|
225 |
=cut |
226 |
|
227 |
sub _map { |
228 |
my ($self, $name, $map) = @_; |
229 |
$self->custom_data->{$name} ||= {}; |
230 |
$self->custom_data->{$name} = $map if ($map); |
231 |
return $self->custom_data->{$name}; |
232 |
} |
233 |
|
234 |
=head2 _add_mapping |
235 |
|
236 |
return $self->_add_mapping($map, $name, $server, $attributes) |
237 |
|
238 |
Adds a mapping. Note that this is not used for mappings relating to fields. |
239 |
|
240 |
=cut |
241 |
|
242 |
sub _add_mapping { |
243 |
my ($self, $map, $name, $server, $attributes) = @_; |
244 |
|
245 |
my $attr_string = Koha::QueryParser::Driver::PQF::Util::attributes_to_attr_string($attributes); |
246 |
$attributes->{'attr_string'} = $attr_string; |
247 |
|
248 |
$map->{'by_name'}{$name}{$server} = $attributes; |
249 |
$map->{'by_attr'}{$server}{$attr_string} = { 'name' => $name, %$attributes }; |
250 |
|
251 |
return $map; |
252 |
} |
253 |
|
254 |
=head2 _add_field_mapping |
255 |
|
256 |
return $self->_add_field_mapping($map, $class, $field, $server, $attributes) |
257 |
|
258 |
Adds a mapping for field-related data. |
259 |
|
260 |
=cut |
261 |
|
262 |
sub _add_field_mapping { |
263 |
my ($self, $map, $class, $field, $server, $attributes) = @_; |
264 |
my $attr_string = Koha::QueryParser::Driver::PQF::Util::attributes_to_attr_string($attributes); |
265 |
$attributes->{'attr_string'} = $attr_string; |
266 |
|
267 |
$map->{'by_name'}{$class}{$field}{$server} = $attributes; |
268 |
$map->{'by_attr'}{$server}{$attr_string} = { 'classname' => $class, 'field' => $field, %$attributes }; |
269 |
return $map; |
270 |
} |
271 |
|
272 |
|
273 |
=head2 bib1_mapping_by_name |
274 |
|
275 |
my $attributes = $QParser->bib1_mapping_by_name($type, $name[, $subname], $server); |
276 |
my $attributes = $QParser->bib1_mapping_by_name('field', 'author', 'personal', 'biblioserver'); |
277 |
my $attributes = $QParser->bib1_mapping_by_name('filter', 'pubdate', 'biblioserver'); |
278 |
|
279 |
Retrieve the Bib-1 attribute set associated with the specified mapping. |
280 |
=cut |
281 |
|
282 |
sub bib1_mapping_by_name { |
283 |
my $server = pop; |
284 |
my ($self, $type, $name, $field) = @_; |
285 |
|
286 |
return unless ($server && $name); |
287 |
return unless ($type eq 'field' || $type eq 'modifier' || $type eq 'filter' || $type eq 'relevance_bump'); |
288 |
if ($type eq 'field') { |
289 |
# Unfortunately field is a special case thanks to the class->field hierarchy |
290 |
return $self->_map('bib1_' . $type . '_map')->{'by_name'}{$name}{$field}{$server}; |
291 |
} else { |
292 |
return $self->_map('bib1_' . $type . '_map')->{'by_name'}{$name}{$server}; |
293 |
} |
294 |
} |
295 |
|
296 |
=head2 bib1_mapping_by_attr |
297 |
|
298 |
my $field = $QParser->bib1_mapping_by_attr($type, $server, \%attr); |
299 |
my $field = $QParser->bib1_mapping_by_attr('field', 'biblioserver', {'1' => '1003'}); |
300 |
print $field->{'classname'}; # prints "author" |
301 |
print $field->{'field'}; # prints "personal" |
302 |
|
303 |
Retrieve the search field/modifier/filter used for the specified Bib-1 attribute set. |
304 |
|
305 |
=cut |
306 |
|
307 |
sub bib1_mapping_by_attr { |
308 |
my ($self, $type, $server, $attributes) = @_; |
309 |
return unless ($server && $attributes); |
310 |
|
311 |
my $attr_string = Koha::QueryParser::Driver::PQF::Util::attributes_to_attr_string($attributes); |
312 |
|
313 |
return $self->bib1_mapping_by_attr_string($type, $server, $attr_string); |
314 |
} |
315 |
|
316 |
=head2 bib1_mapping_by_attr_string |
317 |
|
318 |
my $field = $QParser->bib1_mapping_by_attr_string($type, $server, $attr_string); |
319 |
my $field = $QParser->bib1_mapping_by_attr_string('field', 'biblioserver', '@attr 1=1003'); |
320 |
print $field->{'classname'}; # prints "author" |
321 |
print $field->{'field'}; # prints "personal" |
322 |
|
323 |
Retrieve the search field/modifier/filter used for the specified Bib-1 attribute string |
324 |
(i.e. PQF snippet). |
325 |
|
326 |
=cut |
327 |
|
328 |
sub bib1_mapping_by_attr_string { |
329 |
my ($self, $type, $server, $attr_string) = @_; |
330 |
return unless ($server && $attr_string); |
331 |
return unless ($type eq 'field' || $type eq 'modifier' || $type eq 'filter' || $type eq 'relevance_bump'); |
332 |
|
333 |
return $self->_map('bib1_' . $type . '_map')->{'by_attr'}{$server}{$attr_string}; |
334 |
} |
335 |
|
336 |
|
337 |
=head2 _canonicalize_field_map |
338 |
|
339 |
Convert a field map into its canonical form for serialization. Used only for |
340 |
fields and relevance bumps. |
341 |
|
342 |
=cut |
343 |
|
344 |
sub _canonicalize_field_map { |
345 |
my ( $map, $aliases ) = @_; |
346 |
my $canonical_map = {}; |
347 |
|
348 |
foreach my $class ( keys %{ $map->{'by_name'} } ) { |
349 |
$canonical_map->{$class} ||= {}; |
350 |
foreach my $field ( keys %{ $map->{'by_name'}->{$class} } ) { |
351 |
my $field_map = { |
352 |
'index' => $field, |
353 |
'label' => ucfirst($field), |
354 |
'enabled' => '1', |
355 |
}; |
356 |
foreach |
357 |
my $server ( keys %{ $map->{'by_name'}->{$class}->{$field} } ) |
358 |
{ |
359 |
$field_map->{'bib1_mapping'} ||= {}; |
360 |
$field_map->{'bib1_mapping'}->{$server} = |
361 |
$map->{'by_name'}->{$class}->{$field}->{$server}; |
362 |
delete $field_map->{'bib1_mapping'}->{$server}->{'attr_string'} |
363 |
if defined( |
364 |
$field_map->{'bib1_mapping'}->{$server} |
365 |
->{'attr_string'} |
366 |
); |
367 |
} |
368 |
if ($aliases) { |
369 |
$field_map->{'aliases'} = []; |
370 |
foreach my $alias ( @{ $aliases->{$class}->{$field} } ) { |
371 |
push @{ $field_map->{$class}->{$field}->{'aliases'} }, |
372 |
$alias; |
373 |
} |
374 |
} |
375 |
$canonical_map->{$class}->{$field} = $field_map; |
376 |
} |
377 |
} |
378 |
return $canonical_map; |
379 |
} |
380 |
|
381 |
=head2 _canonicalize_map |
382 |
|
383 |
Convert a map into its canonical form for serialization. Not used for fields. |
384 |
|
385 |
=cut |
386 |
|
387 |
sub _canonicalize_map { |
388 |
my ($map) = @_; |
389 |
my $canonical_map = {}; |
390 |
|
391 |
foreach my $name ( keys %{ $map->{'by_name'} } ) { |
392 |
$canonical_map->{$name} = { |
393 |
'label' => ucfirst($name), |
394 |
'enabled' => 1, |
395 |
'bib1_mapping' => {} |
396 |
}; |
397 |
foreach my $server ( keys %{ $map->{'by_name'}->{$name} } ) { |
398 |
$canonical_map->{$name}->{'bib1_mapping'}->{$server} = |
399 |
$map->{'by_name'}->{$name}->{$server}; |
400 |
delete $canonical_map->{$name}->{'bib1_mapping'}->{$server} |
401 |
->{'attr_string'} |
402 |
if defined( |
403 |
$canonical_map->{$name}->{'bib1_mapping'}->{$server} |
404 |
->{'attr_string'} |
405 |
); |
406 |
} |
407 |
} |
408 |
return $canonical_map; |
409 |
} |
410 |
|
411 |
=head2 serialize_mappings |
412 |
|
413 |
my $yaml = $QParser->serialize_mappings; |
414 |
my $json = $QParser->serialze_mappings('json'); |
415 |
|
416 |
Serialize Bib-1 mappings to YAML or JSON. |
417 |
|
418 |
=cut |
419 |
|
420 |
sub serialize_mappings { |
421 |
my ( $self, $format ) = @_; |
422 |
$format ||= 'yaml'; |
423 |
my $config; |
424 |
|
425 |
$config->{'field_mappings'} = |
426 |
_canonicalize_field_map( $self->bib1_field_map, |
427 |
$self->search_field_aliases ); |
428 |
$config->{'modifier_mappings'} = |
429 |
_canonicalize_map( $self->bib1_modifier_map ); |
430 |
$config->{'filter_mappings'} = _canonicalize_map( $self->bib1_filter_map ); |
431 |
$config->{'relevance_bumps'} = |
432 |
_canonicalize_field_map( $self->bib1_relevance_bump_map ); |
433 |
|
434 |
if ( $format eq 'json' && can_load( modules => { 'JSON' => undef } ) ) { |
435 |
return JSON::to_json($config); |
436 |
} |
437 |
elsif ( can_load( modules => { 'YAML::Any' => undef } ) ) { |
438 |
return YAML::Any::Dump($config); |
439 |
} |
440 |
return; |
441 |
} |
442 |
|
443 |
=head2 initialize |
444 |
|
445 |
$QParser->initialize( { 'bib1_field_mappings' => \%bib1_field_mappings, |
446 |
'search_field_alias_mappings' => \%search_field_alias_mappings, |
447 |
'bib1_modifier_mappings' => \%bib1_modifier_mappings, |
448 |
'bib1_filter_mappings' => \%bib1_filter_mappings, |
449 |
'relevance_bumps' => \%relevance_bumps }); |
450 |
|
451 |
Initialize the QueryParser mapping tables based on the provided configuration. |
452 |
This method was written to play nice with YAML configuration files loaded by load_config. |
453 |
|
454 |
=cut |
455 |
|
456 |
sub initialize { |
457 |
my ( $self, $args ) = @_; |
458 |
|
459 |
my $field_mappings = $args->{'field_mappings'}; |
460 |
my $modifier_mappings = $args->{'modifier_mappings'}; |
461 |
my $filter_mappings = $args->{'filter_mappings'}; |
462 |
my $relbumps = $args->{'relevance_bumps'}; |
463 |
my ( $server, $bib1_mapping ); |
464 |
foreach my $class ( keys %$field_mappings ) { |
465 |
foreach my $field ( keys %{ $field_mappings->{$class} } ) { |
466 |
if ( $field_mappings->{$class}->{$field}->{'enabled'} ) { |
467 |
while ( ( $server, $bib1_mapping ) = |
468 |
each |
469 |
%{ $field_mappings->{$class}->{$field}->{'bib1_mapping'} } ) |
470 |
{ |
471 |
$self->add_bib1_field_map( |
472 |
$class => $field => $server => $bib1_mapping ); |
473 |
} |
474 |
$self->add_search_field_alias( $class => $field => |
475 |
$field_mappings->{$class}->{$field}->{'index'} ); |
476 |
foreach my $alias ( |
477 |
@{ $field_mappings->{$class}->{$field}->{'aliases'} } ) |
478 |
{ |
479 |
next |
480 |
if ( $alias eq |
481 |
$field_mappings->{$class}->{$field}->{'index'} ); |
482 |
$self->add_search_field_alias( $class => $field => $alias ); |
483 |
} |
484 |
} |
485 |
} |
486 |
} |
487 |
foreach my $modifier ( keys %$modifier_mappings ) { |
488 |
if ( $modifier_mappings->{$modifier}->{'enabled'} ) { |
489 |
while ( ( $server, $bib1_mapping ) = |
490 |
each %{ $modifier_mappings->{$modifier}->{'bib1_mapping'} } ) |
491 |
{ |
492 |
$self->add_bib1_modifier_map( |
493 |
$modifier => $server => $bib1_mapping ); |
494 |
} |
495 |
} |
496 |
} |
497 |
foreach my $filter ( keys %$filter_mappings ) { |
498 |
if ( $filter_mappings->{$filter}->{'enabled'} ) { |
499 |
while ( ( $server, $bib1_mapping ) = |
500 |
each %{ $filter_mappings->{$filter}->{'bib1_mapping'} } ) |
501 |
{ |
502 |
if ( $filter_mappings->{$filter}->{'target_syntax_callback'} eq |
503 |
'date_filter_target_callback' ) |
504 |
{ |
505 |
$bib1_mapping->{'target_syntax_callback'} = |
506 |
\&Koha::QueryParser::Driver::PQF::date_filter_target_callback; |
507 |
} |
508 |
$self->add_bib1_filter_map( |
509 |
$filter => $server => $bib1_mapping ); |
510 |
} |
511 |
} |
512 |
} |
513 |
foreach my $class ( keys %$relbumps ) { |
514 |
foreach my $field ( keys %{ $relbumps->{$class} } ) { |
515 |
if ( $relbumps->{$class}->{$field}->{'enabled'} ) { |
516 |
while ( ( $server, $bib1_mapping ) = |
517 |
each %{ $relbumps->{$class}->{$field}->{'bib1_mapping'} } ) |
518 |
{ |
519 |
$self->add_relevance_bump( |
520 |
$class => $field => $server => $bib1_mapping, |
521 |
1 |
522 |
); |
523 |
} |
524 |
} |
525 |
} |
526 |
} |
527 |
return $self; |
528 |
} |
529 |
|
530 |
=head2 load_config |
531 |
|
532 |
$QParser->load_config($file_name); |
533 |
|
534 |
Load a YAML file with a parser configuration. The YAML file should match the following format: |
535 |
|
536 |
--- |
537 |
field_mappings: |
538 |
author: |
539 |
"": |
540 |
aliases: |
541 |
- au |
542 |
bib1_mapping: |
543 |
biblioserver: |
544 |
1: 1003 |
545 |
enabled: 1 |
546 |
index: '' |
547 |
label: '' |
548 |
conference: |
549 |
aliases: |
550 |
- conference |
551 |
- cfn |
552 |
bib1_mapping: |
553 |
biblioserver: |
554 |
1: 1006 |
555 |
enabled: 1 |
556 |
index: conference |
557 |
label: Conference |
558 |
filter_mappings: |
559 |
acqdate: |
560 |
bib1_mapping: |
561 |
biblioserver: |
562 |
1: Date-of-acquisition |
563 |
4: 4 |
564 |
target_syntax_callback: date_filter_target_callback |
565 |
enabled: 1 |
566 |
label: Acqdate |
567 |
modifier_mappings: |
568 |
AuthidAsc: |
569 |
bib1_mapping: |
570 |
authorityserver: |
571 |
"": 0 |
572 |
1: Local-Number |
573 |
7: 1 |
574 |
op: "@or" |
575 |
enabled: 1 |
576 |
label: AuthidAsc |
577 |
... |
578 |
|
579 |
=cut |
580 |
|
581 |
sub load_config { |
582 |
my ($self, $file) = @_; |
583 |
require YAML::Any; |
584 |
return unless ($file && -f $file); |
585 |
my $config = YAML::Any::LoadFile($file); |
586 |
return unless ($config); |
587 |
$self->initialize($config); |
588 |
return 1; |
589 |
} |
590 |
|
591 |
sub TEST_SETUP { |
592 |
my ($self) = @_; |
593 |
|
594 |
return $self; |
595 |
$self->default_search_class( 'keyword' ); |
596 |
|
597 |
$self->add_bib1_field_map('keyword' => 'abstract' => 'biblioserver' => { '1' => '62' } ); |
598 |
$self->add_search_field_alias( 'keyword' => 'abstract' => 'ab' ); |
599 |
$self->add_bib1_field_map('keyword' => '' => 'biblioserver' => { '1' => '1016' } ); |
600 |
$self->add_search_field_alias( 'keyword' => '' => 'kw' ); |
601 |
$self->add_bib1_field_map('author' => '' => 'biblioserver' => { '1' => '1003' } ); |
602 |
$self->add_search_field_alias( 'author' => '' => 'au' ); |
603 |
$self->add_bib1_field_map('author' => 'personal' => 'biblioserver' => { '1' => '1004' } ); |
604 |
$self->add_bib1_field_map('author' => 'corporate' => 'biblioserver' => { '1' => '1005' } ); |
605 |
$self->add_search_field_alias( 'author' => 'corporate' => 'cpn' ); |
606 |
$self->add_bib1_field_map('author' => 'conference' => 'biblioserver' => { '1' => '1006' } ); |
607 |
$self->add_search_field_alias( 'author' => 'conference' => 'cfn' ); |
608 |
$self->add_bib1_field_map('keyword' => 'local-classification' => 'biblioserver' => { '1' => '20' } ); |
609 |
$self->add_search_field_alias( 'keyword' => 'local-classification' => 'lcn' ); |
610 |
$self->add_search_field_alias( 'keyword' => 'local-classification' => 'callnum' ); |
611 |
$self->add_bib1_field_map('keyword' => 'bib-level' => 'biblioserver' => { '1' => '1021' } ); |
612 |
$self->add_bib1_field_map('keyword' => 'code-institution' => 'biblioserver' => { '1' => '56' } ); |
613 |
$self->add_bib1_field_map('keyword' => 'language' => 'biblioserver' => { '1' => '54' } ); |
614 |
$self->add_search_field_alias( 'keyword' => 'language' => 'ln' ); |
615 |
$self->add_bib1_field_map('keyword' => 'record-type' => 'biblioserver' => { '1' => '1001' } ); |
616 |
$self->add_search_field_alias( 'keyword' => 'record-type' => 'rtype' ); |
617 |
$self->add_search_field_alias( 'keyword' => 'record-type' => 'mc-rtype' ); |
618 |
$self->add_search_field_alias( 'keyword' => 'record-type' => 'mus' ); |
619 |
$self->add_bib1_field_map('keyword' => 'content-type' => 'biblioserver' => { '1' => '1034' } ); |
620 |
$self->add_search_field_alias( 'keyword' => 'content-type' => 'ctype' ); |
621 |
$self->add_bib1_field_map('keyword' => 'lc-card-number' => 'biblioserver' => { '1' => '9' } ); |
622 |
$self->add_search_field_alias( 'keyword' => 'lc-card-number' => 'lc-card' ); |
623 |
$self->add_bib1_field_map('keyword' => 'local-number' => 'biblioserver' => { '1' => '12' } ); |
624 |
$self->add_search_field_alias( 'keyword' => 'local-number' => 'sn' ); |
625 |
$self->add_bib1_filter_map( 'biblioserver', 'copydate', { 'target_syntax_callback' => \&Koha::QueryParser::Driver::PQF::date_filter_target_callback, '1' => '30', '4' => '4' }); |
626 |
$self->add_bib1_filter_map( 'biblioserver', 'pubdate', { 'target_syntax_callback' => \&Koha::QueryParser::Driver::PQF::date_filter_target_callback, '1' => 'pubdate', '4' => '4' }); |
627 |
$self->add_bib1_filter_map( 'biblioserver', 'acqdate', { 'target_syntax_callback' => \&Koha::QueryParser::Driver::PQF::date_filter_target_callback, '1' => 'Date-of-acquisition', '4' => '4' }); |
628 |
$self->add_bib1_field_map('keyword' => 'isbn' => 'biblioserver' => { '1' => '7' } ); |
629 |
$self->add_search_field_alias( 'keyword' => 'isbn' => 'nb' ); |
630 |
$self->add_bib1_field_map('keyword' => 'issn' => 'biblioserver' => { '1' => '8' } ); |
631 |
$self->add_search_field_alias( 'keyword' => 'issn' => 'ns' ); |
632 |
$self->add_bib1_field_map('keyword' => 'identifier-standard' => 'biblioserver' => { '1' => '1007' } ); |
633 |
$self->add_search_field_alias( 'keyword' => 'identifier-standard' => 'ident' ); |
634 |
$self->add_bib1_field_map('keyword' => 'upc' => 'biblioserver' => { '1' => 'UPC' } ); |
635 |
$self->add_search_field_alias( 'keyword' => 'upc' => 'upc' ); |
636 |
$self->add_bib1_field_map('keyword' => 'ean' => 'biblioserver' => { '1' => 'EAN' } ); |
637 |
$self->add_search_field_alias( 'keyword' => 'ean' => 'ean' ); |
638 |
$self->add_bib1_field_map('keyword' => 'music' => 'biblioserver' => { '1' => 'Music-number' } ); |
639 |
$self->add_search_field_alias( 'keyword' => 'music' => 'music' ); |
640 |
$self->add_bib1_field_map('keyword' => 'stock-number' => 'biblioserver' => { '1' => '1028' } ); |
641 |
$self->add_search_field_alias( 'keyword' => 'stock-number' => 'stock-number' ); |
642 |
$self->add_bib1_field_map('keyword' => 'material-type' => 'biblioserver' => { '1' => '1031' } ); |
643 |
$self->add_search_field_alias( 'keyword' => 'material-type' => 'material-type' ); |
644 |
$self->add_bib1_field_map('keyword' => 'place-publication' => 'biblioserver' => { '1' => '59' } ); |
645 |
$self->add_search_field_alias( 'keyword' => 'place-publication' => 'pl' ); |
646 |
$self->add_bib1_field_map('keyword' => 'personal-name' => 'biblioserver' => { '1' => 'Personal-name' } ); |
647 |
$self->add_search_field_alias( 'keyword' => 'personal-name' => 'pn' ); |
648 |
$self->add_bib1_field_map('keyword' => 'publisher' => 'biblioserver' => { '1' => '1018' } ); |
649 |
$self->add_search_field_alias( 'keyword' => 'publisher' => 'pb' ); |
650 |
$self->add_bib1_field_map('keyword' => 'note' => 'biblioserver' => { '1' => '63' } ); |
651 |
$self->add_search_field_alias( 'keyword' => 'note' => 'nt' ); |
652 |
$self->add_bib1_field_map('keyword' => 'record-control-number' => 'biblioserver' => { '1' => '1045' } ); |
653 |
$self->add_search_field_alias( 'keyword' => 'record-control-number' => 'rcn' ); |
654 |
$self->add_bib1_field_map('subject' => '' => 'biblioserver' => { '1' => '21' } ); |
655 |
$self->add_search_field_alias( 'subject' => '' => 'su' ); |
656 |
$self->add_search_field_alias( 'subject' => '' => 'su-to' ); |
657 |
$self->add_search_field_alias( 'subject' => '' => 'su-geo' ); |
658 |
$self->add_search_field_alias( 'subject' => '' => 'su-ut' ); |
659 |
$self->add_bib1_field_map('subject' => 'name-personal' => 'biblioserver' => { '1' => '1009' } ); |
660 |
$self->add_search_field_alias( 'subject' => 'name-personal' => 'su-na' ); |
661 |
$self->add_bib1_field_map('title' => '' => 'biblioserver' => { '1' => '4' } ); |
662 |
$self->add_search_field_alias( 'title' => '' => 'ti' ); |
663 |
$self->add_bib1_field_map('title' => 'cover' => 'biblioserver' => { '1' => '36' } ); |
664 |
$self->add_search_field_alias( 'title' => 'cover' => 'title-cover' ); |
665 |
$self->add_bib1_field_map('keyword' => 'host-item' => 'biblioserver' => { '1' => '1033' } ); |
666 |
$self->add_bib1_field_map('keyword' => 'video-mt' => 'biblioserver' => { '1' => 'Video-mt' } ); |
667 |
$self->add_bib1_field_map('keyword' => 'graphics-type' => 'biblioserver' => { '1' => 'Graphic-type' } ); |
668 |
$self->add_bib1_field_map('keyword' => 'graphics-support' => 'biblioserver' => { '1' => 'Graphic-support' } ); |
669 |
$self->add_bib1_field_map('keyword' => 'type-of-serial' => 'biblioserver' => { '1' => 'Type-Of-Serial' } ); |
670 |
$self->add_bib1_field_map('keyword' => 'regularity-code' => 'biblioserver' => { '1' => 'Regularity-code' } ); |
671 |
$self->add_bib1_field_map('keyword' => 'material-type' => 'biblioserver' => { '1' => 'Material-type' } ); |
672 |
$self->add_bib1_field_map('keyword' => 'literature-code' => 'biblioserver' => { '1' => 'Literature-Code' } ); |
673 |
$self->add_bib1_field_map('keyword' => 'biography-code' => 'biblioserver' => { '1' => 'Biography-code' } ); |
674 |
$self->add_bib1_field_map('keyword' => 'illustration-code' => 'biblioserver' => { '1' => 'Illustration-code' } ); |
675 |
$self->add_bib1_field_map('title' => 'series' => 'biblioserver' => { '1' => '5' } ); |
676 |
$self->add_search_field_alias( 'title' => 'series' => 'title-series' ); |
677 |
$self->add_search_field_alias( 'title' => 'series' => 'se' ); |
678 |
$self->add_bib1_field_map('title' => 'uniform' => 'biblioserver' => { '1' => 'Title-uniform' } ); |
679 |
$self->add_search_field_alias( 'title' => 'uniform' => 'title-uniform' ); |
680 |
$self->add_bib1_field_map('subject' => 'authority-number' => 'biblioserver' => { '1' => 'Koha-Auth-Number' } ); |
681 |
$self->add_search_field_alias( 'subject' => 'authority-number' => 'an' ); |
682 |
$self->add_bib1_field_map('keyword' => 'control-number' => 'biblioserver' => { '1' => '9001' } ); |
683 |
$self->add_bib1_field_map('keyword' => 'biblionumber' => 'biblioserver' => { '1' => '9002', '5' => '100' } ); |
684 |
$self->add_bib1_field_map('keyword' => 'totalissues' => 'biblioserver' => { '1' => '9003' } ); |
685 |
$self->add_bib1_field_map('keyword' => 'cn-bib-source' => 'biblioserver' => { '1' => '9004' } ); |
686 |
$self->add_bib1_field_map('keyword' => 'cn-bib-sort' => 'biblioserver' => { '1' => '9005' } ); |
687 |
$self->add_bib1_field_map('keyword' => 'itemtype' => 'biblioserver' => { '1' => '9006' } ); |
688 |
$self->add_search_field_alias( 'keyword' => 'itemtype' => 'mc-itemtype' ); |
689 |
$self->add_bib1_field_map('keyword' => 'cn-class' => 'biblioserver' => { '1' => '9007' } ); |
690 |
$self->add_bib1_field_map('keyword' => 'cn-item' => 'biblioserver' => { '1' => '9008' } ); |
691 |
$self->add_bib1_field_map('keyword' => 'cn-prefix' => 'biblioserver' => { '1' => '9009' } ); |
692 |
$self->add_bib1_field_map('keyword' => 'cn-suffix' => 'biblioserver' => { '1' => '9010' } ); |
693 |
$self->add_bib1_field_map('keyword' => 'suppress' => 'biblioserver' => { '1' => '9011' } ); |
694 |
$self->add_bib1_field_map('keyword' => 'id-other' => 'biblioserver' => { '1' => '9012' } ); |
695 |
$self->add_bib1_field_map('keyword' => 'date-entered-on-file' => 'biblioserver' => { '1' => 'date-entered-on-file' } ); |
696 |
$self->add_bib1_field_map('keyword' => 'extent' => 'biblioserver' => { '1' => 'Extent' } ); |
697 |
$self->add_bib1_field_map('keyword' => 'llength' => 'biblioserver' => { '1' => 'llength' } ); |
698 |
$self->add_bib1_field_map('keyword' => 'summary' => 'biblioserver' => { '1' => 'Summary' } ); |
699 |
$self->add_bib1_field_map('keyword' => 'withdrawn' => 'biblioserver' => { '1' => '8001' } ); |
700 |
$self->add_bib1_field_map('keyword' => 'lost' => 'biblioserver' => { '1' => '8002' } ); |
701 |
$self->add_bib1_field_map('keyword' => 'classification-source' => 'biblioserver' => { '1' => '8003' } ); |
702 |
$self->add_bib1_field_map('keyword' => 'materials-specified' => 'biblioserver' => { '1' => '8004' } ); |
703 |
$self->add_bib1_field_map('keyword' => 'damaged' => 'biblioserver' => { '1' => '8005' } ); |
704 |
$self->add_bib1_field_map('keyword' => 'restricted' => 'biblioserver' => { '1' => '8006' } ); |
705 |
$self->add_bib1_field_map('keyword' => 'cn-sort' => 'biblioserver' => { '1' => '8007' } ); |
706 |
$self->add_bib1_field_map('keyword' => 'notforloan' => 'biblioserver' => { '1' => '8008', '4' => '109' } ); |
707 |
$self->add_bib1_field_map('keyword' => 'ccode' => 'biblioserver' => { '1' => '8009' } ); |
708 |
$self->add_search_field_alias( 'keyword' => 'ccode' => 'mc-ccode' ); |
709 |
$self->add_bib1_field_map('keyword' => 'itemnumber' => 'biblioserver' => { '1' => '8010' } ); |
710 |
$self->add_bib1_field_map('keyword' => 'homebranch' => 'biblioserver' => { '1' => 'homebranch' } ); |
711 |
$self->add_search_field_alias( 'keyword' => 'homebranch' => 'branch' ); |
712 |
$self->add_bib1_field_map('keyword' => 'holdingbranch' => 'biblioserver' => { '1' => '8012' } ); |
713 |
$self->add_bib1_field_map('keyword' => 'location' => 'biblioserver' => { '1' => '8013' } ); |
714 |
$self->add_search_field_alias( 'keyword' => 'location' => 'mc-loc' ); |
715 |
$self->add_bib1_field_map('keyword' => 'acqsource' => 'biblioserver' => { '1' => '8015' } ); |
716 |
$self->add_bib1_field_map('keyword' => 'coded-location-qualifier' => 'biblioserver' => { '1' => '8016' } ); |
717 |
$self->add_bib1_field_map('keyword' => 'price' => 'biblioserver' => { '1' => '8017' } ); |
718 |
$self->add_bib1_field_map('keyword' => 'stocknumber' => 'biblioserver' => { '1' => '1062' } ); |
719 |
$self->add_search_field_alias( 'keyword' => 'stocknumber' => 'inv' ); |
720 |
$self->add_bib1_field_map('keyword' => 'stack' => 'biblioserver' => { '1' => '8018' } ); |
721 |
$self->add_bib1_field_map('keyword' => 'issues' => 'biblioserver' => { '1' => '8019' } ); |
722 |
$self->add_bib1_field_map('keyword' => 'renewals' => 'biblioserver' => { '1' => '8020' } ); |
723 |
$self->add_bib1_field_map('keyword' => 'reserves' => 'biblioserver' => { '1' => '8021' } ); |
724 |
$self->add_bib1_field_map('keyword' => 'local-classification' => 'biblioserver' => { '1' => '8022' } ); |
725 |
$self->add_bib1_field_map('keyword' => 'barcode' => 'biblioserver' => { '1' => '8023' } ); |
726 |
$self->add_search_field_alias( 'keyword' => 'barcode' => 'bc' ); |
727 |
$self->add_bib1_field_map('keyword' => 'onloan' => 'biblioserver' => { '1' => '8024' } ); |
728 |
$self->add_bib1_field_map('keyword' => 'datelastseen' => 'biblioserver' => { '1' => '8025' } ); |
729 |
$self->add_bib1_field_map('keyword' => 'datelastborrowed' => 'biblioserver' => { '1' => '8026' } ); |
730 |
$self->add_bib1_field_map('keyword' => 'copynumber' => 'biblioserver' => { '1' => '8027' } ); |
731 |
$self->add_bib1_field_map('keyword' => 'uri' => 'biblioserver' => { '1' => '8028' } ); |
732 |
$self->add_bib1_field_map('keyword' => 'replacementprice' => 'biblioserver' => { '1' => '8029' } ); |
733 |
$self->add_bib1_field_map('keyword' => 'replacementpricedate' => 'biblioserver' => { '1' => '8030' } ); |
734 |
$self->add_bib1_field_map('keyword' => 'itype' => 'biblioserver' => { '1' => '8031' } ); |
735 |
$self->add_search_field_alias( 'keyword' => 'itype' => 'mc-itype' ); |
736 |
$self->add_bib1_field_map('keyword' => 'ff8-22' => 'biblioserver' => { '1' => '8822' } ); |
737 |
$self->add_bib1_field_map('keyword' => 'ff8-23' => 'biblioserver' => { '1' => '8823' } ); |
738 |
$self->add_bib1_field_map('keyword' => 'ff8-34' => 'biblioserver' => { '1' => '8834' } ); |
739 |
# Audience |
740 |
$self->add_bib1_field_map('keyword' => 'audience' => 'biblioserver' => { '1' => '8822' } ); |
741 |
$self->add_search_field_alias( 'keyword' => 'audience' => 'aud' ); |
742 |
|
743 |
# Content and Literary form |
744 |
$self->add_bib1_field_map('keyword' => 'fiction' => 'biblioserver' => { '1' => '8833' } ); |
745 |
$self->add_search_field_alias( 'keyword' => 'fiction' => 'fic' ); |
746 |
$self->add_bib1_field_map('keyword' => 'biography' => 'biblioserver' => { '1' => '8834' } ); |
747 |
$self->add_search_field_alias( 'keyword' => 'biography' => 'bio' ); |
748 |
|
749 |
# Format |
750 |
$self->add_bib1_field_map('keyword' => 'format' => 'biblioserver' => { '1' => '8823' } ); |
751 |
# format used as a limit FIXME: needed? |
752 |
$self->add_bib1_field_map('keyword' => 'l-format' => 'biblioserver' => { '1' => '8703' } ); |
753 |
|
754 |
$self->add_bib1_field_map('keyword' => 'illustration-code' => 'biblioserver' => { '1' => 'Illustration-code ' } ); |
755 |
|
756 |
# Lexile Number |
757 |
$self->add_bib1_field_map('keyword' => 'lex' => 'biblioserver' => { '1' => '9903 r=r' } ); |
758 |
|
759 |
#Accelerated Reader Level |
760 |
$self->add_bib1_field_map('keyword' => 'arl' => 'biblioserver' => { '1' => '9904 r=r' } ); |
761 |
|
762 |
#Accelerated Reader Point |
763 |
$self->add_bib1_field_map('keyword' => 'arp' => 'biblioserver' => { '1' => '9013 r=r' } ); |
764 |
|
765 |
# Curriculum |
766 |
$self->add_bib1_field_map('keyword' => 'curriculum' => 'biblioserver' => { '1' => '9658' } ); |
767 |
|
768 |
## Statuses |
769 |
$self->add_bib1_field_map('keyword' => 'popularity' => 'biblioserver' => { '1' => 'issues' } ); |
770 |
|
771 |
## Type Limits |
772 |
$self->add_bib1_field_map('keyword' => 'dt-bks' => 'biblioserver' => { '1' => '8700' } ); |
773 |
$self->add_bib1_field_map('keyword' => 'dt-vis' => 'biblioserver' => { '1' => '8700' } ); |
774 |
$self->add_bib1_field_map('keyword' => 'dt-sr' => 'biblioserver' => { '1' => '8700' } ); |
775 |
$self->add_bib1_field_map('keyword' => 'dt-cf' => 'biblioserver' => { '1' => '8700' } ); |
776 |
$self->add_bib1_field_map('keyword' => 'dt-map' => 'biblioserver' => { '1' => '8700' } ); |
777 |
|
778 |
$self->add_bib1_field_map('keyword' => 'name' => 'biblioserver' => { '1' => '1002' } ); |
779 |
$self->add_bib1_field_map('keyword' => 'item' => 'biblioserver' => { '1' => '9520' } ); |
780 |
$self->add_bib1_field_map('keyword' => 'host-item-number' => 'biblioserver' => { '1' => '8911' } ); |
781 |
$self->add_search_field_alias( 'keyword' => 'host-item-number' => 'hi' ); |
782 |
|
783 |
$self->add_bib1_field_map('keyword' => 'alwaysmatch' => 'biblioserver' => { '1' => '_ALLRECORDS', '2' => '103' } ); |
784 |
$self->add_bib1_field_map('subject' => 'complete' => 'biblioserver' => { '1' => '21', '3' => '1', '4' => '1', '5' => '100', '6' => '3' } ); |
785 |
|
786 |
$self->add_bib1_modifier_map('relevance' => 'biblioserver' => { '2' => '102' } ); |
787 |
$self->add_bib1_modifier_map('title-sort-za' => 'biblioserver' => { '7' => '2', '1' => '36', '' => '0', 'op' => '@or' } ); |
788 |
$self->add_bib1_modifier_map('title-sort-az' => 'biblioserver' => { '7' => '1', '1' => '36', '' => '0', 'op' => '@or' } ); |
789 |
$self->add_bib1_modifier_map('relevance_dsc' => 'biblioserver' => { '2' => '102' } ); |
790 |
$self->add_bib1_modifier_map('title_dsc' => 'biblioserver' => { '7' => '2', '1' => '4', '' => '0', 'op' => '@or' } ); |
791 |
$self->add_bib1_modifier_map('title_asc' => 'biblioserver' => { '7' => '1', '1' => '4', '' => '0', 'op' => '@or' } ); |
792 |
$self->add_bib1_modifier_map('author_asc' => 'biblioserver' => { '7' => '2', '1' => '1003', '' => '0', 'op' => '@or' } ); |
793 |
$self->add_bib1_modifier_map('author_dsc' => 'biblioserver' => { '7' => '1', '1' => '1003', '' => '0', 'op' => '@or' } ); |
794 |
$self->add_bib1_modifier_map('popularity_asc' => 'biblioserver' => { '7' => '2', '1' => '9003', '' => '0', 'op' => '@or' } ); |
795 |
$self->add_bib1_modifier_map('popularity_dsc' => 'biblioserver' => { '7' => '1', '1' => '9003', '' => '0', 'op' => '@or' } ); |
796 |
$self->add_bib1_modifier_map('call_number_asc' => 'biblioserver' => { '7' => '2', '1' => '8007', '' => '0', 'op' => '@or' } ); |
797 |
$self->add_bib1_modifier_map('call_number_dsc' => 'biblioserver' => { '7' => '1', '1' => '8007', '' => '0', 'op' => '@or' } ); |
798 |
$self->add_bib1_modifier_map('pubdate_asc' => 'biblioserver' => { '7' => '2', '1' => '31', '' => '0', 'op' => '@or' } ); |
799 |
$self->add_bib1_modifier_map('pubdate_dsc' => 'biblioserver' => { '7' => '1', '1' => '31', '' => '0', 'op' => '@or' } ); |
800 |
$self->add_bib1_modifier_map('acqdate_asc' => 'biblioserver' => { '7' => '2', '1' => '32', '' => '0', 'op' => '@or' } ); |
801 |
$self->add_bib1_modifier_map('acqdate_dsc' => 'biblioserver' => { '7' => '1', '1' => '32', '' => '0', 'op' => '@or' } ); |
802 |
|
803 |
$self->add_bib1_modifier_map('title_za' => 'biblioserver' => { '7' => '2', '1' => '4', '' => '0', 'op' => '@or' } ); |
804 |
$self->add_bib1_modifier_map('title_az' => 'biblioserver' => { '7' => '1', '1' => '4', '' => '0', 'op' => '@or' } ); |
805 |
$self->add_bib1_modifier_map('author_za' => 'biblioserver' => { '7' => '2', '1' => '1003', '' => '0', 'op' => '@or' } ); |
806 |
$self->add_bib1_modifier_map('author_az' => 'biblioserver' => { '7' => '1', '1' => '1003', '' => '0', 'op' => '@or' } ); |
807 |
$self->add_bib1_modifier_map('ascending' => 'biblioserver' => { '7' => '1' } ); |
808 |
$self->add_bib1_modifier_map('descending' => 'biblioserver' => { '7' => '2' } ); |
809 |
|
810 |
$self->add_bib1_field_map('title' => 'exacttitle' => 'biblioserver' => { '1' => '4', '4' => '1', '6' => '3' } ); |
811 |
$self->add_search_field_alias( 'title' => 'exacttitle' => 'ti,ext' ); |
812 |
$self->add_bib1_field_map('author' => 'exactauthor' => 'biblioserver' => { '1' => '1003', '4' => '1', '6' => '3' } ); |
813 |
$self->add_search_field_alias( 'author' => 'exactauthor' => 'au,ext' ); |
814 |
|
815 |
$self->add_bib1_field_map('subject' => 'headingmain' => 'authorityserver' => { '1' => 'Heading-Main' } ); |
816 |
$self->add_bib1_field_map('subject' => 'heading' => 'authorityserver' => { '1' => 'Heading' } ); |
817 |
$self->add_bib1_field_map('subject' => 'matchheading' => 'authorityserver' => { '1' => 'Match-heading' } ); |
818 |
$self->add_bib1_field_map('subject' => 'seefrom' => 'authorityserver' => { '1' => 'Match-heading-see-from' } ); |
819 |
$self->add_bib1_field_map('subject' => '' => 'authorityserver' => { '1' => 'Match-heading' } ); |
820 |
$self->add_bib1_field_map('keyword' => 'alwaysmatch' => 'authorityserver' => { '1' => '_ALLRECORDS', '2' => '103' } ); |
821 |
$self->add_bib1_field_map('keyword' => 'match' => 'authorityserver' => { '1' => 'Match' } ); |
822 |
$self->add_bib1_field_map('keyword' => 'thesaurus' => 'authorityserver' => { '1' => 'Subject-heading-thesaurus' } ); |
823 |
$self->add_bib1_field_map('keyword' => 'authtype' => 'authorityserver' => { '1' => 'authtype', '5' => '100' } ); |
824 |
$self->add_bib1_field_map('keyword' => '' => 'authorityserver' => { '1' => 'Any' } ); |
825 |
$self->add_search_field_alias( 'subject' => 'headingmain' => 'mainmainentry' ); |
826 |
$self->add_search_field_alias( 'subject' => 'heading' => 'mainentry' ); |
827 |
$self->add_search_field_alias( 'subject' => 'heading' => 'he' ); |
828 |
$self->add_search_field_alias( 'subject' => 'matchheading' => 'match-heading' ); |
829 |
$self->add_search_field_alias( 'keyword' => '' => 'any' ); |
830 |
$self->add_search_field_alias( 'keyword' => 'match' => 'match' ); |
831 |
$self->add_search_field_alias( 'subject' => 'seefrom' => 'see-from' ); |
832 |
$self->add_search_field_alias( 'keyword' => 'thesaurus' => 'thesaurus' ); |
833 |
$self->add_search_field_alias( 'keyword' => 'alwaysmatch' => 'all' ); |
834 |
$self->add_search_field_alias( 'keyword' => 'authtype' => 'authtype' ); |
835 |
$self->add_search_field_alias( 'keyword' => 'authtype' => 'at' ); |
836 |
|
837 |
$self->add_bib1_field_map('subject' => 'start' => 'authorityserver' => { '3' => '2', '4' => '1', '5' => '1' } ); |
838 |
$self->add_bib1_field_map('subject' => 'exact' => 'authorityserver' => { '4' => '1', '5' => '100', '6' => '3' } ); |
839 |
|
840 |
$self->add_bib1_modifier_map('HeadingAsc' => 'authorityserver' => { '7' => '1', '1' => 'Heading', '' => '0', 'op' => '@or' } ); |
841 |
$self->add_bib1_modifier_map('HeadingDsc' => 'authorityserver' => { '7' => '2', '1' => 'Heading', '' => '0', 'op' => '@or' } ); |
842 |
$self->add_bib1_modifier_map('AuthidAsc' => 'authorityserver' => { '7' => '1', '1' => 'Local-Number', '' => '0', 'op' => '@or' } ); |
843 |
$self->add_bib1_modifier_map('AuthidDsc' => 'authorityserver' => { '7' => '2', '1' => 'Local-Number', '' => '0', 'op' => '@or' } ); |
844 |
$self->add_bib1_modifier_map('Relevance' => 'authorityserver' => { '2' => '102' } ); |
845 |
|
846 |
return $self; |
847 |
} |
848 |
|
849 |
1; |