/[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 307 by dpavlin, Tue Dec 20 00:03:04 2005 UTC revision 508 by dpavlin, Mon May 15 13:32:18 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.08;  
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    =item --stats
59    
60    dump statistics about used fields and subfields in each input
61    
62  =back  =back
63    
64  =cut  =cut
# Line 54  my $limit; Line 69  my $limit;
69  my $clean = 0;  my $clean = 0;
70  my $config = 'conf/config.yml';  my $config = 'conf/config.yml';
71  my $debug = 0;  my $debug = 0;
72    my $only_db_name;
73    my $force_set = 0;
74    my $stats = 0;
75    
76  GetOptions(  GetOptions(
77          "limit=i" => \$limit,          "limit=i" => \$limit,
78          "offset=i" => \$offset,          "offset=i" => \$offset,
79          "clean" => \$clean,          "clean" => \$clean,
80            "one=s" => \$only_db_name,
81            "only=s" => \$only_db_name,
82          "config" => \$config,          "config" => \$config,
83          "debug" => \$debug,          "debug" => \$debug,
84            "force-set" => \$force_set,
85            "stats" => \$stats,
86  );  );
87    
88  $config = LoadFile($config);  $config = LoadFile($config);
# Line 69  print "config = ",Dumper($config) if ($d Line 91  print "config = ",Dumper($config) if ($d
91    
92  die "no databases in config file!\n" unless ($config->{databases});  die "no databases in config file!\n" unless ($config->{databases});
93    
94    my $log = _new WebPAC::Common()->_get_logger();
95    
96    my $use_indexer = $config->{use_indexer} || 'hyperestraier';
97    $log->info("using $use_indexer indexing engine...");
98    
99  my $total_rows = 0;  my $total_rows = 0;
100    my $start_t = time();
101    
102  while (my ($database, $db_config) = each %{ $config->{databases} }) {  while (my ($database, $db_config) = each %{ $config->{databases} }) {
103    
104          my $log = _new WebPAC::Common()->_get_logger();          next if ($only_db_name && $database !~ m/$only_db_name/i);
105    
106          #          my $indexer;
107          # open Hyper Estraier database  
108          #          my $indexer_config = $config->{$use_indexer} || $log->logdie("can't find '$use_indexer' part in confguration");
109            $indexer_config->{database} = $database;
110            $indexer_config->{clean} = $clean;
111            $indexer_config->{label} = $db_config->{name};
112    
113            if ($use_indexer eq 'hyperestraier') {
114    
115                    # open Hyper Estraier database
116                    use WebPAC::Output::Estraier '0.10';
117                    $indexer = new WebPAC::Output::Estraier( %{ $indexer_config } );
118            
119            } elsif ($use_indexer eq 'kinosearch') {
120    
121                    # open KinoSearch
122                    use WebPAC::Output::KinoSearch;
123                    $indexer_config->{clean} = 1 unless (-e $indexer_config->{index_path});
124                    $indexer = new WebPAC::Output::KinoSearch( %{ $indexer_config } );
125    
126          my $est_config = $config->{hyperestraier} || $log->logdie("can't find 'hyperestraier' part in confguration");          } else {
127          $est_config->{database} = $database;                  $log->logdie("unknown use_indexer: $use_indexer");
128          $est_config->{clean} = $clean;          }
129    
130          my $est = new WebPAC::Output::Estraier( %{ $est_config } );          $log->logide("can't continue without valid indexer") unless ($indexer);
131    
132          #          #
133          # now WebPAC::Store          # now WebPAC::Store
# Line 97  while (my ($database, $db_config) = each Line 141  while (my ($database, $db_config) = each
141                  $log->info("creating new database $database in $db_path");                  $log->info("creating new database $database in $db_path");
142                  rmtree( $db_path ) || $log->warn("can't remove $db_path: $!");                  rmtree( $db_path ) || $log->warn("can't remove $db_path: $!");
143          } else {          } else {
144                  $log->info("working on $database in $db_path");                  $log->debug("working on $database in $db_path");
145          }          }
146    
147          my $db = new WebPAC::Store(          my $db = new WebPAC::Store(
# Line 134  while (my ($database, $db_config) = each Line 178  while (my ($database, $db_config) = each
178    
179                  my $input_module = $config->{webpac}->{inputs}->{$type};                  my $input_module = $config->{webpac}->{inputs}->{$type};
180    
181                  $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}'");
182    
183                  my $input_db = new WebPAC::Input(                  my $input_db = new WebPAC::Input(
184                          module => $input_module,                          module => $input_module,
# Line 142  while (my ($database, $db_config) = each Line 186  while (my ($database, $db_config) = each
186                          limit => $limit || $input->{limit},                          limit => $limit || $input->{limit},
187                          offset => $offset,                          offset => $offset,
188                          lookup => $lookup,                          lookup => $lookup,
189                            recode => $input->{recode},
190                            stats => $stats,
191                  );                  );
192                  $log->logdie("can't create input using $input_module") unless ($input);                  $log->logdie("can't create input using $input_module") unless ($input);
193    
# Line 158  while (my ($database, $db_config) = each Line 204  while (my ($database, $db_config) = each
204                          prefix => $input->{name},                          prefix => $input->{name},
205                  );                  );
206    
207                    my $rules;
208                  my $normalize_path = $input->{normalize}->{path};                  my $normalize_path = $input->{normalize}->{path};
209    
210                    if ($force_set) {
211                            my $new_norm_path = $normalize_path;
212                            $new_norm_path =~ s/\.xml$/.pl/;
213                            if (-e $new_norm_path) {
214                                    $log->debug("--force-set replaced $normalize_path with $new_norm_path");
215                                    $normalize_path = $new_norm_path;
216                            } else {
217                                    $log->debug("--force-set failed on $new_norm_path, fallback to $normalize_path");
218                            }
219                    }
220    
221                  if ($normalize_path =~ m/\.xml$/i) {                  if ($normalize_path =~ m/\.xml$/i) {
222                          $n->open(                          $n->open(
223                                  tag => $input->{normalize}->{tag},                                  tag => $input->{normalize}->{tag},
224                                  xml_file => $input->{normalize}->{path},                                  xml_file => $normalize_path,
225                          );                          );
226                  } elsif ($normalize_path =~ m/\.(?:yml|yaml)$/i) {                  } elsif ($normalize_path =~ m/\.(?:yml|yaml)$/i) {
227                          $n->open_yaml(                          $n->open_yaml(
228                                  path => $normalize_path,                                  path => $normalize_path,
229                                  tag => $input->{normalize}->{tag},                                  tag => $input->{normalize}->{tag},
230                          );                          );
231                    } elsif ($normalize_path =~ m/\.(?:pl)$/i) {
232                            $n = undef;
233                            $log->info("using WebPAC::Normalize::Set to process $normalize_path");
234                            $rules = read_file( $normalize_path ) or die "can't open $normalize_path: $!";
235                  }                  }
236    
237                  foreach my $pos ( 0 ... $input_db->size ) {                  foreach my $pos ( 0 ... $input_db->size ) {
# Line 184  while (my ($database, $db_config) = each Line 246  while (my ($database, $db_config) = each
246                                  push @{ $row->{'000'} }, $pos;                                  push @{ $row->{'000'} }, $pos;
247                          }                          }
248    
249                          my $ds = $n->data_structure($row);                                  
250                            my $ds;
251                            if ($n) {
252                                    $ds = $n->data_structure($row);
253                            } else {
254                                    $ds = WebPAC::Normalize::Set::data_structure(
255                                            row => $row,
256                                            rules => $rules,
257                                            lookup => $lookup->lookup_hash,
258                                    );
259    
260                                    $db->save_ds(
261                                            id => $mfn,
262                                            ds => $ds,
263                                            prefix => $input->{name},
264                                    ) if ($ds);
265                            }
266    
267                          $est->add(                          $indexer->add(
268                                  id => $input->{name} . "/" . $mfn,                                  id => $input->{name} . "/" . $mfn,
269                                  ds => $ds,                                  ds => $ds,
270                                  type => $config->{hyperestraier}->{type},                                  type => $config->{$use_indexer}->{type},
271                          );                          );
272    
273                          $total_rows++;                          $total_rows++;
274                  }                  }
275    
276                    $log->info("statistics of fields usage:\n", $input_db->stats) if ($stats);
277    
278          };          };
279    
280          $log->info("$total_rows records indexed");          eval { $indexer->finish } if ($indexer->can('finish'));
281    
282            my $dt = time() - $start_t;
283            $log->info("$total_rows records indexed in " .
284                    sprintf("%.2f sec [%.2f rec/sec]",
285                            $dt, ($total_rows / $dt)
286                    )
287            );
288    
289          #          #
290          # add Hyper Estraier links to other databases          # add Hyper Estraier links to other databases
291          #          #
292          if (ref($db_config->{links}) eq 'ARRAY') {          if (ref($db_config->{links}) eq 'ARRAY') {
293                  foreach my $link (@{ $db_config->{links} }) {                  foreach my $link (@{ $db_config->{links} }) {
294                          $log->info("adding link $database -> $link->{to} [$link->{credit}]");                          if ($use_indexer eq 'hyperestraier') {
295                          $est->add_link(                                  $log->info("adding link $database -> $link->{to} [$link->{credit}]");
296                                  from => $database,                                  $indexer->add_link(
297                                  to => $link->{to},                                          from => $database,
298                                  credit => $link->{credit},                                          to => $link->{to},
299                          );                                          credit => $link->{credit},
300                                    );
301                            } else {
302                                    $log->warn("NOT IMPLEMENTED WITH $use_indexer: adding link $database -> $link->{to} [$link->{credit}]");
303                            }
304                  }                  }
305          }          }
306    

Legend:
Removed from v.307  
changed lines
  Added in v.508

  ViewVC Help
Powered by ViewVC 1.1.26