/[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 391 by dpavlin, Sun Jan 22 14:27:50 2006 UTC revision 507 by dpavlin, Mon May 15 13:15:01 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/;  use Time::HiRes qw/time/;
21    use File::Slurp;
22    
23  =head1 NAME  =head1 NAME
24    
# Line 41  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 --one=database_name  =item --only=database_name
46    
47  reindex just single database  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 59  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 $one_db_name;  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" => \$one_db_name,          "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 76  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();  my $start_t = time();
101    
102  while (my ($database, $db_config) = each %{ $config->{databases} }) {  while (my ($database, $db_config) = each %{ $config->{databases} }) {
103    
104          next if ($one_db_name && $database !~ m/$one_db_name/i);          next if ($only_db_name && $database !~ m/$only_db_name/i);
105    
106          my $log = _new WebPAC::Common()->_get_logger();          my $indexer;
107    
108          #          my $indexer_config = $config->{$use_indexer} || $log->logdie("can't find '$use_indexer' part in confguration");
109          # open Hyper Estraier database          $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 152  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 168  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 194  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);                          my $ds = $n ? $n->data_structure($row) :
250                                    WebPAC::Normalize::Set::data_structure(
251                                            row => $row,
252                                            rules => $rules,
253                                            lookup => $lookup->lookup_hash,
254                                    );
255    
256                          $est->add(                          $indexer->add(
257                                  id => $input->{name} . "/" . $mfn,                                  id => $input->{name} . "/" . $mfn,
258                                  ds => $ds,                                  ds => $ds,
259                                  type => $config->{hyperestraier}->{type},                                  type => $config->{$use_indexer}->{type},
260                          );                          );
261    
262                          $total_rows++;                          $total_rows++;
263                  }                  }
264    
265                    $log->info("statistics of fields usage:\n", $input_db->stats) if ($stats);
266    
267          };          };
268    
269            eval { $indexer->finish } if ($indexer->can('finish'));
270    
271          my $dt = time() - $start_t;          my $dt = time() - $start_t;
272          $log->info("$total_rows records indexed in " .          $log->info("$total_rows records indexed in " .
273                  sprintf("%.2f sec [%.2f rec/sec]",                  sprintf("%.2f sec [%.2f rec/sec]",
# Line 219  while (my ($database, $db_config) = each Line 280  while (my ($database, $db_config) = each
280          #          #
281          if (ref($db_config->{links}) eq 'ARRAY') {          if (ref($db_config->{links}) eq 'ARRAY') {
282                  foreach my $link (@{ $db_config->{links} }) {                  foreach my $link (@{ $db_config->{links} }) {
283                          $log->info("adding link $database -> $link->{to} [$link->{credit}]");                          if ($use_indexer eq 'hyperestraier') {
284                          $est->add_link(                                  $log->info("adding link $database -> $link->{to} [$link->{credit}]");
285                                  from => $database,                                  $indexer->add_link(
286                                  to => $link->{to},                                          from => $database,
287                                  credit => $link->{credit},                                          to => $link->{to},
288                          );                                          credit => $link->{credit},
289                                    );
290                            } else {
291                                    $log->warn("NOT IMPLEMENTED WITH $use_indexer: adding link $database -> $link->{to} [$link->{credit}]");
292                            }
293                  }                  }
294          }          }
295    

Legend:
Removed from v.391  
changed lines
  Added in v.507

  ViewVC Help
Powered by ViewVC 1.1.26