@@ -6,7 +6,7 @@ use List::Util qw( max );
66use MetaCPAN::Query::Favorite ();
77use MetaCPAN::Query::File ();
88use MetaCPAN::Query::Release ();
9- use MetaCPAN::Util qw( single_valued_arrayref_to_scalar true false ) ;
9+ use MetaCPAN::Util qw( true false ) ;
1010
1111extends ' ElasticSearchX::Model::Document::Set' ;
1212
@@ -75,7 +75,8 @@ my @ROGUE_DISTRIBUTIONS = qw(
7575
7676sub find {
7777 my ( $self , $module ) = @_ ;
78- my @candidates = $self -> index -> type(' file' )-> query( {
78+
79+ my $query = {
7980 bool => {
8081 must => [
8182 { term => { indexed => true } },
@@ -119,22 +120,38 @@ sub find {
119120 },
120121 ],
121122 },
122- } )-> sort ( [
123- ' _score' ,
124- { ' version_numified' => { order => ' desc' } },
125- { ' date' => { order => ' desc' } },
126- { ' mime' => { order => ' asc' } },
127- { ' stat.mtime' => { order => ' desc' } }
128- ] )-> search_type(' dfs_query_then_fetch' )-> size(100)-> all;
123+ };
124+
125+ my $res = $self -> es-> search(
126+ index => $self -> index -> name,
127+ type => ' file' ,
128+ search_type => ' dfs_query_then_fetch' ,
129+ body => {
130+ query => $query ,
131+ sort => [
132+ ' _score' ,
133+ { ' version_numified' => { order => ' desc' } },
134+ { ' date' => { order => ' desc' } },
135+ { ' mime' => { order => ' asc' } },
136+ { ' stat.mtime' => { order => ' desc' } }
137+ ],
138+ _source => [
139+ qw( documentation module.indexed module.authoried module.name )
140+ ],
141+ size => 100,
142+ },
143+ );
144+
145+ my @candidates = @{ $res -> {hits }{hits } };
129146
130147 my ($file ) = grep {
131- grep { $_ -> indexed && $_ -> authorized && $_ -> name eq $module }
132- @{ $_ -> module || [] }
133- } grep { !$_ -> documentation || $_ -> documentation eq $module }
148+ grep { $_ -> { indexed } && $_ -> { authorized } && $_ -> { name } eq $module }
149+ @{ $_ -> { module } || [] }
150+ } grep { !$_ -> { documentation } || $_ -> { documentation } eq $module }
134151 @candidates ;
135152
136153 $file ||= shift @candidates ;
137- return $file ? $self -> get( $file -> id ) : undef ;
154+ return $file ? $self -> get( $file -> { _id } ) : undef ;
138155}
139156
140157sub find_pod {
@@ -265,15 +282,13 @@ sub history {
265282
266283sub autocomplete {
267284 my ( $self , @terms ) = @_ ;
268- my $query = join ( q{ } , @terms );
269- return $self unless $query ;
270285
271- my $data = $self -> search_type( ' dfs_query_then_fetch ' ) -> query( {
286+ my $query = {
272287 bool => {
273288 must => [
274289 {
275290 multi_match => {
276- query => $query ,
291+ query => join ( q{ } , @terms ) ,
277292 type => ' most_fields' ,
278293 fields => [ ' documentation' , ' documentation.*' ],
279294 analyzer => ' camelcase' ,
@@ -288,15 +303,21 @@ sub autocomplete {
288303 must_not =>
289304 [ { terms => { distribution => \@ROGUE_DISTRIBUTIONS } }, ],
290305 },
291- } )-> sort ( [ ' _score' , ' documentation' ] );
292-
293- $data = $data -> fields( [qw( documentation release author distribution) ] )
294- unless $self -> fields;
295-
296- $data = $data -> source(0)-> raw-> all;
306+ };
307+
308+ my $data = $self -> es-> search(
309+ search_type => ' dfs_query_then_fetch' ,
310+ index => $self -> index -> name,
311+ type => ' file' ,
312+ body => {
313+ query => $query ,
314+ sort => [ ' _score' , ' documentation' ],
315+ _source => [qw( documentation release author distribution ) ],
316+ },
317+ );
297318
298- single_valued_arrayref_to_scalar( $_ -> { fields } )
299- for @{ $data -> {hits }{hits } };
319+ # this is backcompat. we don't use this end point.
320+ $_ -> { fields } = delete $_ -> { _source } for @{ $data -> {hits }{hits } };
300321
301322 return $data ;
302323}
@@ -307,8 +328,7 @@ sub autocomplete_suggester {
307328
308329 my $search_size = 100;
309330
310- my $suggestions
311- = $self -> search_type(' dfs_query_then_fetch' )-> es-> suggest( {
331+ my $suggestions = $self -> es-> suggest( {
312332 index => $self -> index -> name,
313333 body => {
314334 documentation => {
@@ -319,7 +339,7 @@ sub autocomplete_suggester {
319339 }
320340 }
321341 },
322- } );
342+ } );
323343
324344 my %docs ;
325345
@@ -328,14 +348,6 @@ sub autocomplete_suggester {
328348 ( $docs { $suggest -> {text } }, $suggest -> {score } );
329349 }
330350
331- my @fields = qw(
332- author
333- date
334- deprecated
335- distribution
336- documentation
337- release
338- ) ;
339351 my $data = $self -> es-> search( {
340352 index => $self -> index -> name,
341353 type => ' file' ,
@@ -355,17 +367,22 @@ sub autocomplete_suggester {
355367 ],
356368 }
357369 },
370+ _source => [ qw(
371+ author
372+ date
373+ deprecated
374+ distribution
375+ documentation
376+ release
377+ ) ],
378+ size => $search_size ,
358379 },
359- fields => \@fields ,
360- size => $search_size ,
361380 } );
362381
363382 my %valid = map {
364- my $got = $_ -> {fields };
365- my %record ;
366- @record {@fields } = map { $got -> {$_ }[0] } @fields ;
367- $record {name } = delete $record {documentation }; # rename
368- ( $_ -> {fields }{documentation }[0] => \%record );
383+ my %record = %{ $_ -> {_source } };
384+ $record {name } = delete $record {documentation }; # rename
385+ ( $record {name } => \%record );
369386 } @{ $data -> {hits }{hits } };
370387
371388 # remove any exact match, it will be added later
@@ -393,7 +410,7 @@ sub autocomplete_suggester {
393410sub find_changes_files {
394411 my ( $self , $author , $release ) = @_ ;
395412 my $result = $self -> files_by_category( $author , $release , [' changelog' ],
396- { fields => true } );
413+ { _source => true } );
397414 my ($file ) = @{ $result -> {categories }{changelog } || [] };
398415 return $file ;
399416}
0 commit comments