11package MetaCPAN::Model::Search ;
22
3- use Moose;
3+ use MetaCPAN:: Moose;
44
5+ use Const::Fast qw( const ) ;
56use Log::Contextual qw( :log :dlog ) ;
67use MooseX::StrictConstructor;
78
@@ -23,9 +24,9 @@ has index => (
2324 required => 1,
2425);
2526
26- my $RESULTS_PER_RUN = 200;
27- my @ROGUE_DISTRIBUTIONS
28- = qw( kurila perl_debug perl_mlb perl-5.005_02+apache1.3.3+modperl pod2texi perlbench spodcxx Bundle-Everything) ;
27+ const my $RESULTS_PER_RUN => 200;
28+ const my @ROGUE_DISTRIBUTIONS =>
29+ qw( kurila perl_debug perl_mlb perl-5.005_02+apache1.3.3+modperl pod2texi perlbench spodcxx Bundle-Everything) ;
2930
3031sub _not_rogue {
3132 my @rogue_dists
@@ -36,17 +37,17 @@ sub _not_rogue {
3637sub search_simple {
3738 my ( $self , $search_term ) = @_ ;
3839 my $es_query = $self -> build_query($search_term );
39- my $results = $self -> run_query( file => $es_query );
40- return $results ;
40+ my $es_results = $self -> run_query( file => $es_query );
41+ return $es_results ;
4142}
4243
4344sub search_for_first_result {
4445 my ( $self , $search_term ) = @_ ;
4546 my $es_query = $self -> build_query($search_term );
46- my $results = $self -> run_query( file => $es_query );
47- return unless $results -> {hits }{total };
47+ my $es_results = $self -> run_query( file => $es_query );
48+ return unless $es_results -> {hits }{total };
4849
49- my $data = $results -> {hits }{hits }[0];
50+ my $data = $es_results -> {hits }{hits }[0];
5051 single_valued_arrayref_to_scalar( $data -> {fields } );
5152 return $data -> {fields };
5253}
@@ -232,27 +233,31 @@ sub _search_collapsed {
232233 }
233234 }
234235 );
235- my $results = $self -> run_query( file => $es_query );
236+ my $es_dist_results = $self -> run_query( file => $es_query );
236237
238+ # Look up favs and add to extracted results
237239 my $favorites = $self -> search_favorites(@distributions );
238- $took += sum( grep {defined } $results -> {took }, $favorites -> {took } );
239-
240- $results = $self -> _extract_results_add_favs( $results , $favorites );
240+ my $results
241+ = $self -> _extract_results_add_favs( $es_dist_results , $favorites );
241242 $results = $self -> _collapse_results($results );
243+
244+ # Add descriptions, but only after collapsed as is slow
242245 my @ids = map { $_ -> [0]{id } } @$results ;
243- my $data = {
246+ my $descriptions = $self -> search_descriptions(@ids );
247+ map { $_ -> [0]{description } = $descriptions -> {results }{ $_ -> [0]{id } } }
248+ @{$results };
249+
250+ # Calculate took from sum of all ES searches
251+ $took += sum( grep {defined } $es_dist_results -> {took },
252+ $favorites -> {took }, $descriptions -> {took } );
253+
254+ return {
244255 results => $results ,
245256 total => $total ,
246257 took => $took ,
247258 collapsed => \1,
248259 };
249260
250- my $descriptions = $self -> search_descriptions(@ids );
251- $data -> {took } += $descriptions -> {took } || 0;
252- map { $_ -> [0]{description } = $descriptions -> {results }{ $_ -> [0]{id } } }
253- @{ $data -> {results } };
254-
255- return $data ;
256261}
257262
258263sub _collapse_results {
@@ -265,6 +270,9 @@ sub _collapse_results {
265270 unless ( $collapsed {$distribution } );
266271 push ( @{ $collapsed {$distribution }-> {results } }, $result );
267272 }
273+
274+ # We return array ref because the results have matching modules
275+ # grouped by distribution
268276 return [
269277 map { $collapsed {$_ }-> {results } }
270278 sort { $collapsed {$a }-> {position } <=> $collapsed {$b }-> {position } }
@@ -515,7 +523,7 @@ sub search_favorites {
515523}
516524
517525sub _extract_results_add_favs {
518- my ( $self , $results , $favorites ) = @_ ;
526+ my ( $self , $es_results , $favorites ) = @_ ;
519527
520528 return [
521529 map {
@@ -528,7 +536,7 @@ sub _extract_results_add_favs {
528536 score => $res -> {_score },
529537 favorites => $favorites -> { $res -> {fields }-> {distribution } },
530538 }
531- } @{ $results -> {hits }{hits } }
539+ } @{ $es_results -> {hits }{hits } }
532540 ];
533541}
534542
0 commit comments