View | Details | Raw Unified | Return to bug 12647
Collapse All | Expand All

(-)a/Koha/QueryParser/Driver/PQF/Util.pm (-3 / +2 lines)
Lines 41-51 Convert a hashref with a Bib-1 mapping into its PQF string representation. Link Here
41
sub attributes_to_attr_string {
41
sub attributes_to_attr_string {
42
    my ($attributes) = @_;
42
    my ($attributes) = @_;
43
    my $attr_string = '';
43
    my $attr_string = '';
44
    my $key;
45
    my $value;
44
    my $value;
46
    while (($key, $value) = each(%$attributes)) {
45
    foreach my $key ( sort keys %{$attributes} ) {
47
        next unless looks_like_number($key);
46
        next unless looks_like_number($key);
48
        $attr_string .= ' @attr ' . $key . '=' . $value . ' ';
47
        $attr_string .= ' @attr ' . $key . '=' . $attributes->{ $key } . ' ';
49
    }
48
    }
50
    $attr_string =~ s/^\s*//;
49
    $attr_string =~ s/^\s*//;
51
    $attr_string =~ s/\s*$//;
50
    $attr_string =~ s/\s*$//;
(-)a/t/QueryParser.t (-15 / +56 lines)
Lines 19-38 ok($QParser->load_config('./etc/searchengine/queryparser.yaml'), 'Loaded QP conf Link Here
19
is($QParser->search_class_count, 4, 'Initialized 4 search classes');
19
is($QParser->search_class_count, 4, 'Initialized 4 search classes');
20
is (scalar(@{$QParser->search_fields()->{'keyword'}}), 111, "Correct number of search fields for 'keyword' class");
20
is (scalar(@{$QParser->search_fields()->{'keyword'}}), 111, "Correct number of search fields for 'keyword' class");
21
21
22
is($QParser->target_syntax('biblioserver', 'smith'), '@or @or @attr 1=1016 @attr 4=6 "smith" @attr 9=20 @attr 2=102 @attr 4=6 "smith" @attr 9=34 @attr 2=102 @attr 4=6 "smith"', 'super simple keyword query');
22
# Set keyword search as the default
23
is($QParser->target_syntax('biblioserver', 'au:smith'), '@attr 1=1003 @attr 4=6 "smith"', 'simple author query');
23
$QParser->default_search_class('keyword');
24
is($QParser->target_syntax('biblioserver', 'keyword|publisher:smith'), '@attr 1=1018 @attr 4=6 "smith"', 'fielded publisher query');
24
25
is($QParser->target_syntax('biblioserver', 'ti:"little engine that could"'), '@attr 1=4 @attr 4=1 "little engine that could"', 'phrase query');
25
my $kwd_search = q/@attr 1=1016 @attr 4=6/;
26
is($QParser->target_syntax('biblioserver', 'keyword|titlekw:smith'), '@attr 1=4 @attr 9=20 @attr 2=102 @attr 4=6 "smith"', 'relevance-bumped query');
26
my $weight1    = q/@attr 2=102 @attr 9=20 @attr 4=6/;
27
is($QParser->target_syntax('biblioserver', 'au:smith && johnson'), '@and @attr 1=1003 @attr 4=6 "smith" @attr 1=1003 @attr 4=6 "johnson"', 'query with boolean &&');
27
my $weight2    = q/@attr 2=102 @attr 9=34 @attr 4=6/;
28
is($QParser->target_syntax('biblioserver', 'au:smith && ti:johnson'), '@and @attr 1=1003 @attr 4=6 "smith" @attr 1=4 @attr 4=6 "johnson"', 'query with boolean &&');
28
29
is($QParser->target_syntax('biblioserver', 'au:smith pubdate(-2008)'), '@and @attr 1=1003 @attr 4=6 "smith" @attr 4=4 @attr 1=31 @attr 2=2 "2008"', 'keyword search with pubdate limited to -2008');
29
like( $QParser->target_syntax('biblioserver', 'smith'),
30
is($QParser->target_syntax('biblioserver', 'au:smith pubdate(2008-)'), '@and @attr 1=1003 @attr 4=6 "smith" @attr 4=4 @attr 1=31 @attr 2=4 "2008"', 'keyword search with pubdate limited to 2008-');
30
    qr/\@or \@or $kwd_search "smith" ($weight1 "smith" $weight2 "smith"|$weight2 "smith" $weight1 "smith")/,
31
is($QParser->target_syntax('biblioserver', 'au:smith pubdate(2008)'), '@and @attr 1=1003 @attr 4=6 "smith" @attr 4=4 @attr 1=31 "2008"', 'keyword search with pubdate limited to 2008');
31
    'super simple keyword query');
32
is($QParser->target_syntax('biblioserver', 'au:smith pubdate(1980,2008)'), '@and @attr 1=1003 @attr 4=6 "smith" @or @attr 4=4 @attr 1=31 "1980" @attr 4=4 @attr 1=31 "2008"', 'keyword search with pubdate limited to 1980, 2008');
32
33
is($QParser->target_syntax('biblioserver', 'au:smith #acqdate_dsc'), '@or @attr 1=32 @attr 7=1 0 @attr 1=1003 @attr 4=6 "smith"', 'keyword search sorted by acqdate descending');
33
is($QParser->target_syntax('biblioserver', 'au:smith'),
34
is($QParser->bib1_mapping_by_attr('field', 'biblioserver', {'1' => '1004'})->{'field'}, 'personal', 'retrieve field by attr');
34
    '@attr 1=1003 @attr 4=6 "smith"', 'simple author query');
35
is($QParser->bib1_mapping_by_attr_string('field', 'biblioserver', '@attr 1=1004')->{'field'}, 'personal', 'retrieve field by attrstring');
35
36
is($QParser->target_syntax('biblioserver', 'keyword|publisher:smith'),
37
    '@attr 1=1018 @attr 4=6 "smith"', 'fielded publisher query');
38
39
is($QParser->target_syntax('biblioserver', 'ti:"little engine that could"'),
40
    '@attr 1=4 @attr 4=1 "little engine that could"', 'phrase query');
41
42
is($QParser->target_syntax('biblioserver', 'keyword|titlekw:smith'),
43
    '@attr 1=4 @attr 2=102 @attr 9=20 @attr 4=6 "smith"',
44
    'relevance-bumped query');
45
46
is($QParser->target_syntax('biblioserver', 'au:smith && johnson'),
47
    '@and @attr 1=1003 @attr 4=6 "smith" @attr 1=1003 @attr 4=6 "johnson"',
48
    'query with boolean &&');
49
50
is($QParser->target_syntax('biblioserver', 'au:smith && ti:johnson'),
51
    '@and @attr 1=1003 @attr 4=6 "smith" @attr 1=4 @attr 4=6 "johnson"', 'query with boolean &&');
52
53
is($QParser->target_syntax('biblioserver', 'au:smith pubdate(-2008)'),
54
    '@and @attr 1=1003 @attr 4=6 "smith" @attr 1=31 @attr 4=4 @attr 2=2 "2008"',
55
    'keyword search with pubdate limited to -2008');
56
57
is($QParser->target_syntax('biblioserver', 'au:smith pubdate(2008-)'),
58
    '@and @attr 1=1003 @attr 4=6 "smith" @attr 1=31 @attr 4=4 @attr 2=4 "2008"',
59
    'keyword search with pubdate limited to 2008-');
60
61
is($QParser->target_syntax('biblioserver', 'au:smith pubdate(2008)'),
62
    '@and @attr 1=1003 @attr 4=6 "smith" @attr 1=31 @attr 4=4 "2008"',
63
    'keyword search with pubdate limited to 2008');
64
65
is($QParser->target_syntax('biblioserver', 'au:smith pubdate(1980,2008)'),
66
    '@and @attr 1=1003 @attr 4=6 "smith" @or @attr 1=31 @attr 4=4 "1980" @attr 1=31 @attr 4=4 "2008"',
67
    'keyword search with pubdate limited to 1980, 2008');
68
69
is($QParser->target_syntax('biblioserver', 'au:smith #acqdate_dsc'),
70
    '@or @attr 1=32 @attr 7=1 0 @attr 1=1003 @attr 4=6 "smith"',
71
    'keyword search sorted by acqdate descending');
72
73
is($QParser->bib1_mapping_by_attr('field', 'biblioserver', {'1' => '1004'})->{'field'},
74
    'personal', 'retrieve field by attr');
75
76
is($QParser->bib1_mapping_by_attr_string('field', 'biblioserver', '@attr 1=1004')->{'field'},
77
    'personal', 'retrieve field by attrstring');
36
78
37
is ($QParser->clear_all_mappings, $QParser, 'clear all mappings returns self');
79
is ($QParser->clear_all_mappings, $QParser, 'clear all mappings returns self');
38
is ($QParser->clear_all_configuration, $QParser, 'clear all configuration returns self');
80
is ($QParser->clear_all_configuration, $QParser, 'clear all configuration returns self');
39
- 

Return to bug 12647