/[webpac2]/trunk/run.pl
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /trunk/run.pl

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 301 by dpavlin, Mon Dec 19 21:26:04 2005 UTC revision 493 by dpavlin, Sun May 14 13:42:48 2006 UTC
# Line 12  use WebPAC::Lookup; Line 12  use WebPAC::Lookup;
12  use WebPAC::Input 0.03;  use WebPAC::Input 0.03;
13  use WebPAC::Store 0.03;  use WebPAC::Store 0.03;
14  use WebPAC::Normalize::XML;  use WebPAC::Normalize::XML;
15    use WebPAC::Normalize::Set;
16  use WebPAC::Output::TT;  use WebPAC::Output::TT;
 use WebPAC::Output::Estraier 0.05;  
17  use YAML qw/LoadFile/;  use YAML qw/LoadFile/;
18  use Getopt::Long;  use Getopt::Long;
19  use File::Path;  use File::Path;
20    use Time::HiRes qw/time/;
21    use File::Slurp;
22    
23  =head1 NAME  =head1 NAME
24    
# Line 40  limit loading to 100 records Line 42  limit loading to 100 records
42    
43  remove database and Hyper Estraier index before indexing  remove database and Hyper Estraier index before indexing
44    
45    =item --only=database_name
46    
47    reindex just single database (legacy name is --one)
48    
49  =item --config conf/config.yml  =item --config conf/config.yml
50    
51  path to YAML configuration file  path to YAML configuration file
52    
53    =item --force-set
54    
55    force conversion C<normalize->path> in C<config.yml> from
56    C<.xml> to C<.pl>
57    
58  =back  =back
59    
60  =cut  =cut
# Line 54  my $limit; Line 65  my $limit;
65  my $clean = 0;  my $clean = 0;
66  my $config = 'conf/config.yml';  my $config = 'conf/config.yml';
67  my $debug = 0;  my $debug = 0;
68    my $only_db_name;
69    my $force_set = 0;
70    
71  GetOptions(  GetOptions(
72          "limit=i" => \$limit,          "limit=i" => \$limit,
73          "offset=i" => \$offset,          "offset=i" => \$offset,
74          "clean" => \$clean,          "clean" => \$clean,
75            "one=s" => \$only_db_name,
76            "only=s" => \$only_db_name,
77          "config" => \$config,          "config" => \$config,
78          "debug" => \$debug,          "debug" => \$debug,
79            "force-set" => \$force_set,
80  );  );
81    
82  $config = LoadFile($config);  $config = LoadFile($config);
# Line 69  print "config = ",Dumper($config) if ($d Line 85  print "config = ",Dumper($config) if ($d
85    
86  die "no databases in config file!\n" unless ($config->{databases});  die "no databases in config file!\n" unless ($config->{databases});
87    
88    my $log = _new WebPAC::Common()->_get_logger();
89    
90    my $use_indexer = $config->{use_indexer} || 'hyperestraier';
91    $log->info("using $use_indexer indexing engine...");
92    
93  my $total_rows = 0;  my $total_rows = 0;
94    my $start_t = time();
95    
96  while (my ($database, $db_config) = each %{ $config->{databases} }) {  while (my ($database, $db_config) = each %{ $config->{databases} }) {
97    
98          my $log = _new WebPAC::Common()->_get_logger();          next if ($only_db_name && $database !~ m/$only_db_name/i);
99    
100          #          my $indexer;
         # open Hyper Estraier database  
         #  
101    
102          my $est_config = $config->{hyperestraier} || $log->logdie("can't find 'hyperestraier' part in confguration");          my $indexer_config = $config->{$use_indexer} || $log->logdie("can't find '$use_indexer' part in confguration");
103          $est_config->{database} = $database;          $indexer_config->{database} = $database;
104            $indexer_config->{clean} = $clean;
105          my $est = new WebPAC::Output::Estraier(          $indexer_config->{label} = $db_config->{name};
106                  %{ $est_config },  
107          );          # important: clean database just once!
108            $clean = 0;
109    
110            if ($use_indexer eq 'hyperestraier') {
111    
112                    # open Hyper Estraier database
113                    use WebPAC::Output::Estraier '0.10';
114                    $indexer = new WebPAC::Output::Estraier( %{ $indexer_config } );
115            
116            } elsif ($use_indexer eq 'kinosearch') {
117    
118                    # open KinoSearch
119                    use WebPAC::Output::KinoSearch;
120                    $indexer_config->{clean} = 1 unless (-e $indexer_config->{index_path});
121                    $indexer = new WebPAC::Output::KinoSearch( %{ $indexer_config } );
122    
123          if ($clean) {          } else {
124                  $log->warn("creating new empty index $database");                  $log->logdie("unknown use_indexer: $use_indexer");
                 $est->master( action => 'nodedel', name => $database );  
                 $est->master( action => 'nodeadd', name => $database, label => $database );  
125          }          }
126    
127            $log->logide("can't continue without valid indexer") unless ($indexer);
128    
129          #          #
130          # now WebPAC::Store          # now WebPAC::Store
131          #          #
# Line 104  while (my ($database, $db_config) = each Line 138  while (my ($database, $db_config) = each
138                  $log->info("creating new database $database in $db_path");                  $log->info("creating new database $database in $db_path");
139                  rmtree( $db_path ) || $log->warn("can't remove $db_path: $!");                  rmtree( $db_path ) || $log->warn("can't remove $db_path: $!");
140          } else {          } else {
141                  $log->info("working on $database in $db_path");                  $log->debug("working on $database in $db_path");
142          }          }
143    
144          my $db = new WebPAC::Store(          my $db = new WebPAC::Store(
# Line 141  while (my ($database, $db_config) = each Line 175  while (my ($database, $db_config) = each
175    
176                  my $input_module = $config->{webpac}->{inputs}->{$type};                  my $input_module = $config->{webpac}->{inputs}->{$type};
177    
178                  $log->info("working on input $input->{path} [$input->{type}] using $input_module");                  $log->info("working on input '$input->{path}' [$input->{type}] using $input_module lookup '$input->{lookup}'");
179    
180                  my $input_db = new WebPAC::Input(                  my $input_db = new WebPAC::Input(
181                          module => $input_module,                          module => $input_module,
# Line 149  while (my ($database, $db_config) = each Line 183  while (my ($database, $db_config) = each
183                          limit => $limit || $input->{limit},                          limit => $limit || $input->{limit},
184                          offset => $offset,                          offset => $offset,
185                          lookup => $lookup,                          lookup => $lookup,
186                            recode => $input->{recode},
187                  );                  );
188                  $log->logdie("can't create input using $input_module") unless ($input);                  $log->logdie("can't create input using $input_module") unless ($input);
189    
# Line 165  while (my ($database, $db_config) = each Line 200  while (my ($database, $db_config) = each
200                          prefix => $input->{name},                          prefix => $input->{name},
201                  );                  );
202    
203                    my $rules;
204                  my $normalize_path = $input->{normalize}->{path};                  my $normalize_path = $input->{normalize}->{path};
205    
206                    if ($force_set) {
207                            my $new_norm_path = $normalize_path;
208                            $new_norm_path =~ s/\.xml$/.pl/;
209                            if (-e $new_norm_path) {
210                                    $log->debug("--force-set replaced $normalize_path with $new_norm_path");
211                                    $normalize_path = $new_norm_path;
212                            } else {
213                                    $log->debug("--force-set failed on $new_norm_path, fallback to $normalize_path");
214                            }
215                    }
216    
217                  if ($normalize_path =~ m/\.xml$/i) {                  if ($normalize_path =~ m/\.xml$/i) {
218                          $n->open(                          $n->open(
219                                  tag => $input->{normalize}->{tag},                                  tag => $input->{normalize}->{tag},
220                                  xml_file => $input->{normalize}->{path},                                  xml_file => $normalize_path,
221                          );                          );
222                  } elsif ($normalize_path =~ m/\.(?:yml|yaml)$/i) {                  } elsif ($normalize_path =~ m/\.(?:yml|yaml)$/i) {
223                          $n->open_yaml(                          $n->open_yaml(
224                                  path => $normalize_path,                                  path => $normalize_path,
225                                  tag => $input->{normalize}->{tag},                                  tag => $input->{normalize}->{tag},
226                          );                          );
227                    } elsif ($normalize_path =~ m/\.(?:pl)$/i) {
228                            $n = undef;
229                            $log->info("using WebPAC::Normalize::Set to process $normalize_path");
230                            $rules = read_file( $normalize_path ) or die "can't open $normalize_path: $!";
231                  }                  }
232    
233                  foreach my $pos ( 0 ... $input_db->size ) {                  foreach my $pos ( 0 ... $input_db->size ) {
# Line 191  while (my ($database, $db_config) = each Line 242  while (my ($database, $db_config) = each
242                                  push @{ $row->{'000'} }, $pos;                                  push @{ $row->{'000'} }, $pos;
243                          }                          }
244    
245                          my $ds = $n->data_structure($row);                          my $ds = $n ? $n->data_structure($row) :
246                                    WebPAC::Normalize::Set::data_structure(
247                                            row => $row,
248                                            rules => $rules,
249                                            lookup => $lookup->lookup_hash,
250                                    );
251    
252                          $est->add(                          $indexer->add(
253                                  id => $input->{name} . "/" . $mfn,                                  id => $input->{name} . "/" . $mfn,
254                                  ds => $ds,                                  ds => $ds,
255                                  type => $config->{hyperestraier}->{type},                                  type => $config->{$use_indexer}->{type},
256                          );                          );
257    
258                          $total_rows++;                          $total_rows++;
# Line 204  while (my ($database, $db_config) = each Line 260  while (my ($database, $db_config) = each
260    
261          };          };
262    
263          $log->info("$total_rows records indexed");          eval { $indexer->finish } if ($indexer->can('finish'));
264    
265            my $dt = time() - $start_t;
266            $log->info("$total_rows records indexed in " .
267                    sprintf("%.2f sec [%.2f rec/sec]",
268                            $dt, ($total_rows / $dt)
269                    )
270            );
271    
272          #          #
273          # add Hyper Estraier links to other databases          # add Hyper Estraier links to other databases
274          #          #
275          if (ref($db_config->{links}) eq 'ARRAY') {          if (ref($db_config->{links}) eq 'ARRAY') {
276                  foreach my $link (@{ $db_config->{links} }) {                  foreach my $link (@{ $db_config->{links} }) {
277                          $log->info("adding link $database -> $link->{to} [$link->{credit}]");                          if ($use_indexer eq 'hyperestraier') {
278                          $est->add_link(                                  $log->info("adding link $database -> $link->{to} [$link->{credit}]");
279                                  from => $database,                                  $indexer->add_link(
280                                  to => $link->{to},                                          from => $database,
281                                  credit => $link->{credit},                                          to => $link->{to},
282                          );                                          credit => $link->{credit},
283                                    );
284                            } else {
285                                    $log->warn("NOT IMPLEMENTED WITH $use_indexer: adding link $database -> $link->{to} [$link->{credit}]");
286                            }
287                  }                  }
288          }          }
289    

Legend:
Removed from v.301  
changed lines
  Added in v.493

  ViewVC Help
Powered by ViewVC 1.1.26