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

(-)a/opac/svc/elasticsearch/opac-elasticsearch.pl (-1 / +90 lines)
Lines 9-14 use Unicode::Normalize; Link Here
9
use CGI::Session;
9
use CGI::Session;
10
use Koha::SearchEngine::Elasticsearch::Browse;
10
use Koha::SearchEngine::Elasticsearch::Browse;
11
11
12
use Koha::Items;
13
use C4::Context;
14
12
my $browser = Koha::SearchEngine::Elasticsearch::Browse->new( { index => 'biblios' } );
15
my $browser = Koha::SearchEngine::Elasticsearch::Browse->new( { index => 'biblios' } );
13
my $cgi = CGI->new;
16
my $cgi = CGI->new;
14
my $session = CGI::Session->load() or die CGI::Session->errstr();
17
my $session = CGI::Session->load() or die CGI::Session->errstr();
Lines 33-44 if ($session->param("key") eq "autocomplete") { Link Here
33
    #search by many prefix fields
36
    #search by many prefix fields
34
  if ($length > 1){
37
  if ($length > 1){
35
    my $res = $browser->autocomplete_idx($ses, \@prefix, $session->param("analyzer"), $session->param("token_counter"));
38
    my $res = $browser->autocomplete_idx($ses, \@prefix, $session->param("analyzer"), $session->param("token_counter"));
39
40
    if (C4::Context->yaml_preference('OpacHiddenItems')) {
41
      my @prefix = $res->{ "prefix" };
42
      @prefix = split(',', $prefix[0]);
43
44
      my %biblionumbers;
45
      for (my $i = 0; $i < scalar @prefix; $i++) {
46
        my @hits = @{$res->{ "$i" }->{ "hits" }->{ "hits" }};
47
        if (@hits) {
48
          for (my $j = 0; $j < scalar @hits; $j++) {
49
            # biblionumber->prefix position = hit position within prefix
50
            $biblionumbers{ $hits[$j]->{ "_id" } }{ $i } = $j;
51
          }
52
        }
53
      }
54
55
      if (%biblionumbers) {
56
        my @biblionumbers = keys %biblionumbers;
57
        my $autocomplete_items = Koha::Items->search({
58
          biblionumber => { -in => \@biblionumbers }
59
        });
60
        my $filtered_items = $autocomplete_items->filter_by_visible_in_opac({
61
          patron => undef
62
        });
63
64
        foreach (@biblionumbers) {
65
          my $biblionumber = $_;
66
          my $item = $filtered_items->find({
67
            biblionumber => $biblionumber
68
          });
69
          if (!$item) {
70
            my %removelist = %{$biblionumbers{ $biblionumber }};
71
            foreach (keys %removelist) {
72
              my $hits = $res->{ $_ }->{ "hits" }->{ "hits" };
73
              splice(@{$hits}, $removelist{ $_ }, 1);
74
              $res->{ $_ }->{ "hits" }->{ "total" }--;
75
            }
76
          }
77
        }
78
        for (my $i = 0; $i < scalar @prefix; $i++) {
79
          if ($res->{ $i }->{ "hits" }->{ "max_score" }) {
80
            my $hits = $res->{ $i }->{ "hits" }->{ "hits" };
81
            my $maxscore = 0;
82
            foreach ( @{$hits} ) {
83
              my $score = $_->{"_score"};
84
              $maxscore = $score if ($maxscore < $score);
85
            }
86
            $res->{ $i }->{ "hits" }->{ "max_score" } = $maxscore;
87
          }
88
        }
89
      }
90
    }
91
36
    print $cgi->header("application/json");
92
    print $cgi->header("application/json");
37
    print to_json($res);
93
    print to_json($res);
38
  }
94
  }
39
  #search by one prefix field
95
  #search by one prefix field
40
  elsif ($length == 1) {
96
  elsif ($length == 1) {
41
    my $res = $browser->autocomplete_one_idx($ses, $prefix[0], $session->param("analyzer"), $session->param("token_counter"));
97
    my $res = $browser->autocomplete_one_idx($ses, $prefix[0], $session->param("analyzer"), $session->param("token_counter"));
98
99
    if (C4::Context->yaml_preference('OpacHiddenItems')) {
100
      my $hits = $res->{ "hits" }->{ "hits" };
101
      if (@{$hits}) {
102
        my @biblionumbers;
103
        foreach ( @{$hits} ) {
104
          push(@biblionumbers, $_->{"_id"});
105
        }
106
107
        my $autocomplete_items = Koha::Items->search({
108
          biblionumber => { -in => \@biblionumbers }
109
        });
110
        my $filtered_items = $autocomplete_items->filter_by_visible_in_opac({
111
          patron => undef
112
        });
113
114
        for ( my $i = 0; $i < scalar @biblionumbers; $i++ ) {
115
          my $item = $filtered_items->find({
116
            biblionumber => $biblionumbers[$i]
117
          });
118
          if (!$item) {
119
            splice(@{$hits}, $i, 1);
120
            $res->{ "hits" }->{ "total" }--;
121
          }
122
        }
123
        my $maxscore = 0;
124
        foreach ( @{$hits} ) {
125
          my $score = $_->{"_score"};
126
          $maxscore = $score if ($maxscore < $score);
127
        }
128
        $res->{ "hits" }->{ "max_score" } = $maxscore;
129
      }
130
    }
131
42
    print $cgi->header("application/json");
132
    print $cgi->header("application/json");
43
    print to_json($res);
133
    print to_json($res);
44
  }
134
  }
45
- 

Return to bug 27113