Skip to content

Commit 792eb21

Browse files
committed
Added suggest script
1 parent 7adc1b1 commit 792eb21

File tree

1 file changed

+114
-0
lines changed

1 file changed

+114
-0
lines changed

bin/suggest.pl

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
use strict;
2+
use warnings;
3+
use v5.36;
4+
5+
use DateTime ();
6+
use Getopt::Long;
7+
use MetaCPAN::Logger qw< :log :dlog >;
8+
9+
use MetaCPAN::ES;
10+
11+
#use MetaCPAN::Ingest qw<>;
12+
13+
# config
14+
15+
# args
16+
my $all;
17+
my $days = 1;
18+
GetOptions(
19+
"all" => \$all,
20+
"days=i" => \$days
21+
);
22+
23+
if ($all) {
24+
update_all();
25+
}
26+
else {
27+
update_days();
28+
}
29+
30+
log_info {"done."};
31+
32+
###
33+
34+
sub update_all () {
35+
my $dt = DateTime->new( year => 1994, month => 1 );
36+
my $end_time = DateTime->now->add( months => 1 );
37+
38+
while ( $dt < $end_time ) {
39+
my $gte = $dt->strftime("%Y-%m-%d");
40+
if ( my $d = $days ) {
41+
$dt->add( days => $d );
42+
log_info {"updating suggest data for $d days from: $gte"};
43+
}
44+
else {
45+
$dt->add( months => 1 );
46+
log_info {"updating suggest data for month: $gte"};
47+
}
48+
49+
my $lt = $dt->strftime("%Y-%m-%d");
50+
my $range = +{ range => { date => { gte => $gte, lt => $lt } } };
51+
52+
_update_slice($range);
53+
}
54+
}
55+
56+
sub update_days () {
57+
my $gte
58+
= DateTime->now()->subtract( days => $days )->strftime("%Y-%m-%d");
59+
my $range = +{ range => { date => { gte => $gte } } };
60+
61+
log_info {"updating suggest data since: $gte "};
62+
63+
_update_slice($range);
64+
}
65+
66+
sub _update_slice ($range) {
67+
my $es = MetaCPAN::ES->new( type => "file" );
68+
69+
my $files = $es->scroll(
70+
scroll => '5m',
71+
fields => [qw< id documentation >],
72+
body => {
73+
query => {
74+
bool => {
75+
must => [
76+
{ exists => { field => "documentation" } }, $range
77+
],
78+
}
79+
}
80+
},
81+
);
82+
83+
my $bulk = $es->bulk( timeout => '5m' );
84+
85+
while ( my $file = $files->next ) {
86+
my $documentation = $file->{fields}{documentation}[0];
87+
my $weight = 1000 - length($documentation);
88+
$weight = 0 if $weight < 0;
89+
90+
$bulk->update( {
91+
id => $file->{fields}{id}[0],
92+
doc => {
93+
suggest => {
94+
input => [$documentation],
95+
payload => { doc_name => $documentation },
96+
weight => $weight,
97+
}
98+
},
99+
} );
100+
}
101+
102+
$bulk->flush;
103+
}
104+
105+
__END__
106+
107+
=head1 SYNOPSIS
108+
109+
# bin/suggest [--all] [--days N]
110+
111+
=head1 DESCRIPTION
112+
113+
After importing releases from CPAN, this script will set the suggest
114+
field for autocompletion searches.

0 commit comments

Comments
 (0)